Arrays 使用selenium/webdriverjs遍历表
我想使用Node和WebDriverJ使用Selenium遍历表:Arrays 使用selenium/webdriverjs遍历表,arrays,node.js,selenium,webdriver,ui-testing,Arrays,Node.js,Selenium,Webdriver,Ui Testing,我想使用Node和WebDriverJ使用Selenium遍历表: <table> <tr> <td class="name">Peter</td> <td class="count">1</td> </tr> <tr> <td class="name">John</td> <td class="count">3</
<table>
<tr>
<td class="name">Peter</td>
<td class="count">1</td>
</tr>
<tr>
<td class="name">John</td>
<td class="count">3</td>
</tr>
</table>
我想让每一行都看到名称和行单元格
我所拥有的:
driver.findElements(By.tagName('tr')).then(function(rows){
// for every row
for (var i = 0; i< rows.length; i++){
// check the name cell
rows[i].findElement(By.class('name')).getInnerHtml().then(function(name){
// do some stuff
});
// check the count cell
rows[i].findElement(By.class('count')).getInnerHtml().then(function(count){
// do some stuff
});
}
});
这适用于前几行,但对于许多行,它在某一点失败
我的理论是:for循环中的findElement调用被传递给管理器,然后for循环完成。然后,垃圾收集器删除行数组。一旦管理器执行findElement调用,数组及其元素将不再存在并失败。我得到的错误是:
StaleElementReferenceException:元素未附加到DOM
它确实适用于第一行,因为数组在执行的早期仍然存在
我的问题是:
我做错了什么
我的理论正确吗
如何将行[I]引用绑定到findElement调用,以使它们比原始数组保持更长的时间
--编辑--
当我删除一个内部findElement调用并且每行只查找一个单元格时,我就能够覆盖更多的行。这让我认为,在这种实现中,时间起着重要作用。不应该是这样,所以我可能做错了什么
Selenium中是否有类似于forEach函数的功能?
我发现了问题:
我正在使用一个用Sencha EXTjs实现的网站
该表是在数据存储上创建的:显然,该存储被调用两次,整个表在调用之间被重新创建
所以我不得不等到第二次加载表
这将是下一个挑战。如果不验证行本身的任何内容,可以为每种单元格类型编写XPath,然后逐个迭代,看看是否有效。基本上用driver.findElementsBy.tagName'tr'替换driver.findElementsBy.xpath'//tr/td[@class=\'name\']”和driver.findElementsBy.xpath'//tr/td[@class=\'count\']”分别替换driver.findElementsBy.tagName'tr'。最后我想把名字和计数联系起来。这就是为什么我想逐行检查它,然后检查一行的单元格。如果你用console.logname和console.logcount之类的东西替换//做一些事情,你还会遇到间歇性故障吗?@pat表本质上是动态的吗?意思是在循环行时,它是否以任何方式被改变。还有关于陈旧元素异常的任何类型的堆栈跟踪或其他详细信息吗?@Louis,实际上那里有一些代码,它一直在失败。