问题描述
我正在执行的 selenium web 测试有问题。单击并将我带到下一页(这是正确的)后,我不断收到陈旧的元素引用错误
WebDriver driver = DriverFactory.getWebDriver()
WebElement PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))
List<WebElement> Rows = PositionTable.findElements(By.tagName('tr'))
println('No. of rows: ' + Rows.size())
table: for (int i = 0; i < Rows.size(); i++) {
List<WebElement> Cols = Rows.get(i).findElements(By.tagName('td'))
for (int j = 0; j < Cols.size(); j++) {
if (Cols.get(j).getText().equalsIgnoreCase(ExpectedPosition)) {
Cols.get(j).findElement(By.tagName('a')).click()
WebUI.delay(5)
table: break
}
}
}
解决方法
如果单击按钮更改了页面 html 中的任何内容,则引用将丢失。您已再次找到所有元素。所以改变你的代码如下
WebElement PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))
List<WebElement> Rows = PositionTable.findElements(By.tagName('tr'))
println('No. of rows: ' + Rows.size())
Int countrow = 0
table: while(countrow<Rows.size) {
++countrow
PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))
Rows = PositionTable.findElements(By.tagName('tr'))
List<WebElement> Cols = Rows.get(i).findElements(By.tagName('td'))
Int countcol = 0
whil(countcol < Cols.size()) {
++countcol
Cols = Rows.get(i).findElements(By.tagName('td'))
if (Cols.get(j).getText().equalsIgnoreCase(ExpectedPosition)) {
Cols.get(j).findElement(By.tagName('a')).click()
WebUI.delay(5)
table: break
}
}
}