当前位置: 首页 > 知识库问答 >
问题:

测试抛出StaleElementReferenceException:元素不再附加到DOM或页面已刷新

孙志
2023-03-14
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.google.common.base.Function;

public class WebDriverNavigate {
    public static void main(String[] args) throws InterruptedException {
    System.setProperty("webdriver.gecko.driver",System.getProperty("user.dir")+"/GeckoDriver/geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        driver.navigate().to("http://www.google.com");
        WebElement textbox = driver.findElement(By.id("lst-ib"));
        textbox.sendKeys("Search on Google");       
        WebDriverWait wait = new WebDriverWait(driver,10);
        wait.until(visibilityOfElementLocated(By.id("lst-ib")));
        driver.findElement(By.name("btnK")).click();;
        textbox.clear();                
        textbox.sendKeys("This is the second search");
        WebElement searchbutton2 = driver.findElement(By.id("fZl"));
        searchbutton2.click();
        driver.navigate().back();
        driver.navigate().forward();
        driver.navigate().refresh();

    }

    private static Function<WebDriver,WebElement> visibilityOfElementLocated(final By locator) {
        return new Function<WebDriver, WebElement>() {
            @Override
            public WebElement apply(WebDriver driver) {
                return driver.findElement(locator);
            }
        };
    }
}
<input class="gsfi" id="lst-ib" maxlength="2048" name="q" autocomplete="off" title="Search" value="Search on Google" aria-label="Search" aria-haspopup="false" role="combobox" aria-autocomplete="list" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: transparent url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) repeat scroll 0% 0%; position: absolute; z-index: 6; left: 0px; outline: medium none;" dir="ltr" spellcheck="false" type="text">

线程“main”org.openqa.selenium.StaleElementReferenceException中的异常:stale的元素引用:该元素不再附加到DOM或页面已刷新

共有1个答案

隗昀
2023-03-14

我有过很多次这样的问题,有时是无法解决的。

首先,您应该找到具有Wait或WaitFluent selenium类的元素。因为您可能会尝试在加载元素之前找到它。大概是这样的:

new FluentWait<WebDriver>(driver)
            .withTimeout(IMPLICIT_TIMEOUT, TimeUnit.SECONDS)
            .pollingEvery(RETRY_TIME, TimeUnit.SECONDS)
            .ignoring(StaleElementReferenceException.class,
                      NoSuchElementException.class)
            .until(ExpectedConditions
            .visibilityOfElementLocated(By.xpath(xpath)));

另一种方法是在for中多次尝试,其中包含driver.sleep()。

 类似资料:
  • 我对自动化测试完全陌生。在参考了一些教程之后,我创建了一个自动测试用例。我尝试自动化的测试用例是在单击表的一个标题后检查排序是否正常工作。 我的自动测试用例失败,出现以下异常: 以下是代码: 例外情况来自此行: 有人能告诉我isse的原因以及如何解决吗? 非常感谢您的帮助

  • 我在我的selenium java项目中不断收到一条错误消息。

  • 我正在尝试访问一系列的网页和递归。访问一个页面,然后返回,然后移动到下一个页面,依此类推。用我的代码,我可以访问第一页,然后返回到上一页,但我不能访问下一页,并得到一个陈旧的元素引用错误。我通读了关于这个错误的答案,但仍然不知道我的代码在哪里更改了状态... 下面是我的代码

  • null 下载new month Oct month data以csv格式下载的Exception线程“main”org.openqa.selenium.staleElementReferenceException:Element不再附加到DOM命令持续时间或超时时间:21毫秒有关此错误的文档,请访问:http://seleniumhq.org/exceptions/stale_element_r

  • 我有一个网页,其中包含一些JavaScript并执行一些Ajax调用。当尝试使用Selenium测试它时,我随机得到“PHPUnit_Extensions_Selenium2TestCase_WebDriverException:Element不再附加到DOM”消息,可能是5次运行中的一次。 现在我意识到了Ajax调用和测试引擎之间的竞争问题,我已经采取了措施来保护它,但仍然存在一些问题。我的场景

  • 我试图使用页面对象测试网站,当我执行我的脚本,我得到的元素不再附加到DOM(Selenium::WebDriver::Error::StaleElementReduce ceError)错误消息间歇调用函数。 我该如何克服这个问题,如果有任何建议?