WebdriverIO循环通过元素列表

时间:2018-02-01 08:21:53

标签: javascript selenium webdriver-io

所以我有一个包含250行的表,我想从一列获取所有值并检查它们是否符合所需条件:

const rows = browser.elements(selector..);

  const numbers = [];
  rows.value.forEach(cellData => {
    const value = browser.elementIdText(cellData.value.ELEMENT).value;

    // some logic to check if the value is ok

    numbers.push(value);
  });
  // check if all numbers are sorted correctly

,但大部分时间它都在线上失败(它显示为stale element reference: element is not attached to the page document):

const value = browser.elementIdText(cellData.value.ELEMENT).value;

我尝试了cellDate.getText(),但是有一个Java套接字错误,有人可以帮忙吗?我假设选择器没有按照指示连接到页面,但是我无法弄清楚如何只是循环遍历它们。

1 个答案:

答案 0 :(得分:3)

我之前有一个类似于你的方法的解决方案,虽然它似乎有用,但我认为你的代码可能会稍微调整一下以获得你想要的东西。我从来没有在elementIdText调用结束时链接很多运气。

步骤1:抓取所有数据(browser.elements或浏览器。$$):

let cellData = browser.$$('selector that matches desired Column Data') 

上面返回一个JSON WebElements数组。如您所知,您可以正确地遍历数组,查看"值"。如果您使用与您要查找的列值匹配的选择器,则应将所有类似数据存储在element.value.ELEMENT中。

步骤2:遍历cellData数组并使用ELEMENT

取出browser.elementIdText()的文本值
cellData.forEach((elem) => {

  let number = browser.elementIdText(elem.value.ELEMENT)
    //elementIdText also returns a JSON WebElement so it's number.value
    if(number.value === <condition>) {
      console.log('number looks good')
      //perform other on value logic
    }

  })
  //perform other logic still in loop EX: array.push()
})

我希望这有帮助!如果你遇到任何障碍,请告诉我!