【问题标题】:Is there any better way to deal with StaleElementReferenceException in selenium? [duplicate]有没有更好的方法来处理硒中的 StaleElementReferenceException? [复制]
【发布时间】:2018-10-11 16:29:38
【问题描述】:

我在 TestNG(Java) 中运行了一些 selenium 自动化测试,我收到 org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document 这个错误。我试图调试这个,有人可以帮我在多个页面上解决这个问题。我的测试有近 2000 行,我随机收到此错误。我在代码中使用显式等待和 Thread.sleep。

谢谢

【问题讨论】:

  • 您能否将问题隔离为明显小于 2000 行的内容?
  • 你在使用页面对象吗?
  • @BillHileman 是的,我正在使用页面对象模型。我正在使用延迟初始化来初始化元素。
  • 根据步骤顺序,您可能需要重新创建某些页面对象,而不是尝试在方法之间共享它们。
  • 要详细说明我的评论,我唯一一次遇到过时元素异常,我能够解决问题,只需在步骤(测试方法)中重新实例化页面对象题。我知道还有其他原因,但我自己从未遇到过。

标签: java selenium-webdriver


【解决方案1】:

StaleElementException 发生,如果我们找到一个元素,然后 DOM 得到更新,我们会尝试与该元素进行交互。

如果 Javascript 在 findElement 调用和 click 调用之间更新页面,那么我们可能会收到 StaleElementException。在现代网页上发生这种情况并不少见。然而,它不会始终如一地发生。发生此错误的时机必须恰到好处。

代码,你可以试试!

public boolean retryingFindClick(By by) {
        boolean result = false;
        int attempts = 0;
        while(attempts < 2) {
            try {
                driver.findElement(by).click();
                result = true;
                break;
            } catch(StaleElementException e) {
            }
            attempts++;
        }
        return result;
}

如需更多参考,您可以查看此教程Stale Element Refernce

【讨论】:

    【解决方案2】:

    您可以尝试使用 FluentWait 作为显式等待和 Thread.sleep 的替代方案。 FluentWait 将允许您定义等待条件的最长时间、轮询间隔和要忽略的异常类型。

    String xpath = "//somexpath";
    
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
        .withTimeout(30, SECONDS)
        .pollingEvery(5, SECONDS)
        .ignoring(StaleElementReferenceException.class);
    
    WebElement someElement = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(By.xpath(xpath));
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2012-02-01
      • 2013-11-09
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多