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

如何更改waitDriver以克服'StaleElementReferenceException:StaleElement引用:元素未附加到页面文档`

狄心水
2023-03-14

我运行我的自动化(cucumber、junit、selenium-chrome web驱动程序)。

当我在本地运行时,测试通过。

但当我使用远程web驱动程序在另一台机器上运行时,

我通常(并非总是)在尝试获取图像的src时会出现以下错误:

 Then banner image in preview html should be "p_1047_o_9075_banner_1423040308.png"
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=41.0.2272.118)
  (Driver info: chromedriver=2.13.307650 (feffe1dd547ee7b5c16d38784cd0cd679dfd7850),platform=Mac OS X 10.9.5 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 9 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
System info: host: 'rond-macpro.roam.corp.google.com', ip: '172.16.188.22', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.5', java.version: '1.8.0_40'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/00/1lc48000h01000cxqpysvccm006dhj/T/.org.chromium.Chromium.ofRqKa}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=41.0.2272.118, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 1213beaa792477d6510f7c18cad58284
Command duration or timeout: 395 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'w.com', ip: '172.28.144.7', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-30-generic', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/00/1lc48000h01000cxqpysvccm006dhj/T/.org.chromium.Chromium.ofRqKa}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=41.0.2272.118, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, webdriver.remote.sessionid=bdc90e5b-c05a-4685-b5fa-5a7c4b65347c, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: bdc90e5b-c05a-4685-b5fa-5a7c4b65347c

这与其他情况不同,当waitDriver只是找到一个不同的图像名称,然后我得到:

Then banner image in preview html should be "p_1047_o_9075_banner_1423040308.png"
org.openqa.selenium.TimeoutException: Timed out after 5 seconds waiting for w.testing.web.utils.WebExtensions$$Lambda$3/925829785@5c1b89ac
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'w.com', ip: '172.28.144.7', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-30-generic', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.remote.RemoteWebDriver

以下是我验证图像src的代码:

webExtensions.waitForSrc
                (getSelectorForImageElement(ImageElements.BANNER), BANNER_IMAGE_BASE_PATH + expectedImageName);

    public void waitForSrc(By by, String expectedImageName) {
        waitForCondition(input ->
        {
            try {
                WebElement webElement = input.findElement(by);
                if (webElement == null) {
                    return false;
                } else {
                    String currentSrc = webElement.getAttribute("src");
                    System.out.println(currentSrc);
                    return currentSrc.contains(expectedImageName);
                }
            } catch (TimeoutException exception) {
                exception.printStackTrace();
                //java.util.logging.
                return false;
            }

        });
    }

 public void waitForCondition(Predicate<WebDriver> condition) throws TimeoutException {
        WebDriverWait driverWait = new WebDriverWait(driver, 5);
        driverWait.until(condition);
    }

共有1个答案

尉迟鸿熙
2023-03-14

这个问题可以用几种方法来处理。在这个主题中有一些很好的建议:Selenium WebDriver如何解决陈旧的元素引用异常?

 类似资料:
  • 我正在使用C#和Selenium Chromedriver来做一个测试项目,以抓取谷歌地图。 在到达第二个循环之前,它运行良好: 返回: OpenQA. Selenium.过时元素引用:元素未附加到页面文档 这是我所有的代码: 任何帮助将不胜感激!

  • 我得到了这个错误,当我试图点击一个下拉ID: 我想用这个代码: 有没有什么方法可以防止无限循环,或者更好的方法在我得到这个异常后点击id?

  • 我正在构建一个刮网站的c#应用程序。我认为这个问题是因为页面在一次又一次提交表单后被重新加载而导致的。我必须从选择列表中选择一个选项,然后按回车键,等待页面重新加载新结果。但是重新加载后会导致此错误; 我的代码是这样的; 我也尝试过类似的东西; 时间不多了,我有个例外,时间不多了。

  • 这是HTML结构如下所示 错误跟踪为:

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

  • 所以我正在尝试制作一个在flickr上运行的程序,我已经准备好了所有的东西,直到cookies弹出,它打败了我。 我正在尝试切换到这个iframe,这样我就可以使用“全部接受”按钮。然而,iframe的ID是动态的,所以为了避免这个问题,我尝试以标题为目标。 但是我现在收到了这个错误消息。 我已经尝试添加了10秒的等待时间来给它加载时间,我知道错误的原因是元素不再连接到DOM,但我不知道要使用什么