【发布时间】:2017-06-26 09:41:54
【问题描述】:
我创建了以下方法:
public void waitAndClickElement(WebElement element) throws InterruptedException {
try {
Boolean elementPresent = this.wait.until(ExpectedConditions.elementToBeClickable(element)).isEnabled();
if (elementPresent == true && element.isDisplayed()) {
element.click();
System.out.println("Clicked on the element: " + element.getText());
}
} catch (StaleElementReferenceException elementUpdated) {
Boolean elementPresent = wait.until(ExpectedConditions.stalenessOf(element));
if (elementPresent == true) {
WebElement staleElement = element;
staleElement.click();
System.out.println("Clicked on the 'Stale' element: " + element.getText());
}
} catch (NoSuchElementException e) {
System.out.println("Exception! - Could not click on the element: " + element.getText() + ", Exception: "+ e.toString());
throw (e);
} finally {
}
}
但我似乎仍然得到以下异常:
预期条件失败:等待元素(Proxy element for: DefaultElementLocator 'By.xpath: //a[text()='Exchange Now »']')变得陈旧(使用 500 尝试了 20 秒)毫秒间隔)
但是,假设 20 个构建中有 18 个可以使用相同的方法,有什么想法吗?
谢谢你的帮助
【问题讨论】:
-
不要在
catch (StaleElementReferenceException)块中使用所有逻辑,为什么不再次调用waitAndClickElement(element)?虽然这取决于您如何创建WebElement,但如果您使用缓存查找,它总是会过时,但如果您使用的方法在使用时会被发现,例如FindBy's ,它会一直尝试点击,直到它不再过期。
标签: java selenium selenium-webdriver webdriver