我想用節點和webdriverJS遍歷表硒:硒遍歷表/ webdriverjs
<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 : The Element is not Attached to the DOM
它的工作第一行作爲數組仍然存在於早期的執行上。
我的問題:
我究竟做錯了什麼?
我的理論是否正確?
如何將
row[i]
引用綁定到findElement調用,以使它們保持比原始數組更長的時間?
---- ----編輯
當我刪除內findElement電話中的一個,只追求每行一個單元,我能夠覆蓋更多的行。這讓我覺得,在這個實施中,時間起着一定的作用。這不應該是這樣,所以我可能做錯了什麼。
- Selenium中是否有像
forEach
函數?
如果您沒有驗證行本身的任何內容,您可以爲每種單元類型編寫一個XPath,並逐個對這些單元進行迭代以查看是否有效。基本上用'driver.findElements(By.xpath('// tr/td [@class = \'name \']'))'''''''''''''''driver'替換'driver.findElements(By.tagName('tr')) .findElements(By.xpath('// tr/td [@class = \'count'''))'。 – shri046 2014-11-05 18:01:39
我也在考慮這個選項,但我想保持一行的單元格。最後我想把名字和數字聯繫起來。這就是爲什麼我想要逐行瀏覽它,然後通過一行的單元格。 – pat 2014-11-05 22:07:26
如果你用'console.log(name)'和'console.log(count)'替換你的'//做一些東西''你還會**得到間歇性故障嗎? – Louis 2014-11-05 23:56:07