首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到用于查找元素的页面文档

问org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到用于查找元素的页面文档
EN

Stack Overflow用户
提问于 2021-11-03 19:12:05
回答 1查看 345关注 0票数 0

我使用此代码来单击

代码语言:javascript
复制
List<WebElement> list = driver.findElements(By.xpath("//div[@class='ag-center-cols-container']//div"));

        // check for list elements and print all found elements
        if(!list.isEmpty())
        {
            for (WebElement element : list)
            {
//                System.out.println("Found inner WebElement " + element.getText());
            }
        }

        // iterate sub-elements
        for ( WebElement element : list )
        {
            System.out.println("Searching for " + element.getText());

            if(element.getText().equals(valueToSelect))
            {
                new WebDriverWait(driver, 30).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='overlay ng-star-inserted']")));

                element.click();
                break;  // We need to put break because the loop will continue and we will get exception
            }
        }

但有时我会在element.getText()这一行得到这个错误

代码语言:javascript
复制
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

您知道如何实现列表器来修复此issue>吗

EN

回答 1

Stack Overflow用户

发布于 2021-11-04 02:44:45

org.openqa.selenium.StaleElementReferenceException:

指示对某个元素的引用现在已“过时”-该元素不再出现在页面的DOM上。出现这种预期的原因可能是您的DOM已更新或刷新。例如,在执行click()这样的操作后,您的DOM可能会被更新或刷新。此时,当您尝试在DOM上查找元素时,您将遇到此错误。

您必须在更新或刷新的DOM中重新查找该元素

,但有时我在element.getText()这一行得到这个错误:

创建一个可重用的方法来处理此异常。

代码

代码语言:javascript
复制
public static String getTextFromElement(WebElement element, WebDriver driver) {
    try {
        return element.getText();
    } catch (org.openqa.selenium.StaleElementReferenceException e) {
        new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOf(element));
        return element.getText();
    }
}

例如,您可以这样调用。

代码语言:javascript
复制
System.out.println("Found inner WebElement " + getTextFromElement(element, driver));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69830538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档