0
我正在使用Selenium 2/WebDriver进行自动化。我有一张桌子,并试图在其中选择一行。当测试运行时,我可以看到成为该行强调,如果它被点击,但随即我得到:在表中选择一行并获取“元素不再附加到DOM”WebDriver中的StaleElementReferenceException消息
“org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM”
错误和测试失败。
的代码如下:
@Test
public void rowSelection() throws Exception
{
SeleniumHelper helper = new SeleniumHelper();
action = new SeleniumActionHelper(driver);
helper.login();
String testUrl = navigateToUrl("option/listOptions.xhtml");
driver.get(testUrl);
WebElement table = findElementById("tableSection:dataTableWrapped_data");
List<WebElement> allRows = table.findElements(By.tagName("tr"));
for (WebElement row : allRows)
{
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells)
{
WebElement listName = cell.findElement(By.xpath("./*[text()='body_build']"));
listName.click();
}
}
}
我已经把了Thread.sleep(2000)在正面和listName.click()动作后,但也提供了帮助。任何帮助将不胜感激。
单击元素时,DOM树中的某些内容会发生明显变化,并且记忆元素的某些(或全部 - 取决于DOM更改)会被无效/移动。迭代向后帮助?如果不是,您唯一能做的就是一次找到一个元素 - 为它编写XPath表达式并不难。 – 2012-07-13 20:28:34
这就是我对此非常困惑的地方。在启动.click()的行上,在测试失败之前,会突出显示一秒钟。如果未点击该行,则该行无法突出显示。这也是唯一采取的行动。我正在加载页面,接下来是查找并单击表格中的行。 – squeemish 2012-07-13 21:01:59
是的!它点击第一个元素,没关系。然后它在第二个应该被点击的元素上失败,因为'cells'现在拥有无效的'td'引用。 – 2012-07-13 21:05:29