gpt4 book ai didi

java - 即使我使用 `FluentWait<>`,StaleElementReferenceException

转载 作者:行者123 更新时间:2023-11-30 08:16:26 25 4
gpt4 key购买 nike

我在 Ubunto 上运行 Web E2E 测试(使用 cucumber、junit、selenium webDriver)。

使用remoteWebDriver时,我的测试偶尔失败(使用local-webDriver则不会失败)

Then banner image in preview html should be "p_1047_o_9075_banner_1423040308.png"


Failure
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

当我将代码重构为以下内容时,我认为我已经绕过了这个异常:

    public String getSrcAfterWait(final By by) {
WebElement webElement = getElementAfterWaitForDisplay2(by);
String currentSrc = null;
if (webElement != null) {
currentSrc = webElement.getAttribute("src");
}
return currentSrc;
}


public WebElement getElementAfterWaitForDisplay2(final By by) {
Wait<WebDriver> wait = new FluentWait<>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class, StaleElementReferenceException.class);

return wait.until(ExpectedConditions.presenceOfElementLocated(by));
}

如何进一步稳定此测试?

更新

我正在尝试 mentallurg 解决方案。但这结构好吗?

  public String getButtonTextAfterWait(final By by) {
String currentText;
try {
currentText = tryToGetText(by);

} catch (StaleElementReferenceException ex)
{
currentText = tryToGetText(by);
}
return currentText;
}

最佳答案

如果您的页面是动态的,则可能会发生以下情况。

场景 1。在方法“getSrcAfterWait”中,您通过“getElementAfterWaitForDisplay2”找到了元素。但在调用 webElement.getAttribute("src") 之前,页面上的元素会发生变化。当您调用 webElement.getAttribute("src") 时,“webElement”指向一个已经过时(不再存在)的元素。这会导致 StaleElementReferenceException。

场景 2。可能你有某种动画。因此,元素的新实例会定期创建多次。 “getElementAfterWaitForDisplay2”总是找到符合“By”条件的元素,但有时它是页面上较新的对象。找到该元素之后,在调用 webElement.getAttribute("src") 之前,会在页面上(在 DOM 中)创建一个新实例。这样您的定位变量就会引用已经过时的实例。

这两种情况的简单解决方案:捕获异常并再次定位对象。

更复杂的解决方案,但更通用:使用代理对象并实现异常处理和定位。

关于java - 即使我使用 `FluentWait<>`,StaleElementReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com