我正在使用PageObject / PageFactory设计模式进行UI自动化。使用Selenium 2.0 WebDriver,JAVA,我随机得到错误:org.openqa.selenium.StaleElementReferenceException:当我尝试这样的逻辑时,元素不再附加到DOM:
@FindBy(how = HOW.ID, using = "item")
private List<WebElement> items
private void getItemThroughName(String name) {
wait(items);
for(int i = 0; i < items.size(); i++) {
try {
Thread.sleep(0500);
} catch (InterruptedException e) { }
this.wait(items);
if(items.get(i).getText().contains(name)) {
System.out.println("Found");
break;
}
}
}
错误随机发生在if语句行,因为你可以看到我已经尝试了几件事来避免这种情况,比如睡了一小段时间,或者再次等待元素,它们都没有100%的工作时间
答案 0 :(得分:1)
首先,如果你真的有多个元素的ID为“item”,你应该记录一个错误或与网站上的开发人员交谈以解决这个问题。 ID应该是唯一的。
由于对这个问题的评论已暗示你应该在这种情况下使用ExplicitWait:
private void getItemThroughName(String name) {
new WebDriverWait(driver, 30)
.until(ExpectedConditions.presenceOfElementLocated(
By.xpath("id('item')[.='" + name + "']")
));
// A timeout exception will be thrown otherwise
System.out.println("Found");
}