Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用selenium/webdriverjs遍历表_Arrays_Node.js_Selenium_Webdriver_Ui Testing - Fatal编程技术网

Arrays 使用selenium/webdriverjs遍历表

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</

我想使用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</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,实际上那里有一些代码,它一直在失败。