无法读取 属性 $$ 的未定义 javascript webdriverio

Cannot read property $$ of undefined javascript webdriverio

我正在尝试使用 webdriverio 框架访问嵌套的网络元素。

我有以下代码

function selectSales(sfilters, salesflowName) {
  const sflow = $$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;
  });

/* The below is to select the checkbox from a list of checkboxes under 
the parent */  
sfilters.forEach(fil => {
    sflow.$$("mat-list-option").find(el => { //* > This is where I am getting error.
        return el.getText().includes(fil);
    }).$('mat-pseudo-checkbox').click();
  });
}

我得到 Cannot read property '$$' of undefined

不确定为什么会出现错误。 'sflow' 是父元素,使用 $$("mat-list-option") 访问子元素是出现错误的地方。

您的 sflow 变量未定义,这意味着以下表达式没有 return 任何内容。

$$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;
  });

发生这种情况的原因有多种:

  1. 您确定 $$("app-filters-manager app-salesflow-panel mat-expansion-panel") return 是您要查找的元素的 parent 吗?选择器是否正确?

  2. 请记住,find() 遍历并找到 您的 $$("app-filters-manager app-salesflow-panel mat-expansion-panel") 选择器的 children。它也可能 return 多个 children。如果该选择器已经是您要使用的元素,则删除以下部分:

const sflow = $$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => { return element.getText() === salesflowName; });

  1. 确保为 salesflowName 参数传递正确的值

  2. element.getText() 可能 return 正在处理一些带有空格的文本。尝试 element.getText().trim()

基本上你需要确保 sflow 变量的值被初始化。是否是您的选择器问题,salesflowName 参数或空格未通过相等性测试需要通过调试来调查。

祝你好运!

您的选择器似乎无效。不应该是这样吗(寻找class的选择器)?

const sflow = $$(".app-filters-manager .app-salesflow-panel .mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;`

其他选择器也一样。而find应该return一个children,这样就可以了。

但是如果它是有效的,你确定元素在 DOM 中吗?