【问题标题】:Selenium ERROR : stale element reference: element is not attached to the page documentSelenium 错误:过时的元素引用:元素未附加到页面文档
【发布时间】:2023-03-24 12:44:01
【问题描述】:

我不断收到这个错误,我需要测试所以它可能是我的代码,但我不确定。

这是我的代码:

public static void main(String[] args) throws InterruptedException {

    System.setProperty("webdriver.chrome.driver", "C:\\selenium-2.44.0\\chromedriver.exe");
//  System.setProperty("webdriver.ie.driver", "C:\\selenium-2.44.0\\IEDriverServer.exe");

    WebDriver driver = new ChromeDriver();
//  WebDriver driver = new InternetExplorerDriver();
//  WebDriver driver = new FirefoxDriver();

    driver.get("https://multichannel-custom-qa.Support/");
    driver.findElement(By.id("userID")).sendKeys("REH01");
    driver.findElement(By.name("j_password")).sendKeys("YE02year");
    driver.findElement(By.name("action")).submit();
    String tagName = "";

    driver.findElement(By.linkText("Workbench")).click();

    WebElement searchBox;
    searchBox = driver.findElement(By.xpath("//input[@type='text']"));
    searchBox.sendKeys("X1508706");
    searchBox.findElement(By.cssSelector("css=button.btn.btn-default")).click();
    Thread.sleep(5000);

    searchBox.findElement(By.cssSelector("css=button.btn.btn-default"));
    searchBox.click();

    WebElement link;
    link = driver.findElement(By.linkText("X1508706"));
    link.click();
    Thread.sleep(5000);

这是错误:

Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=39.0.2171.95)
  (Driver info: chromedriver=2.12.301325 (962dea43ddd90e7e4224a03fa3c36a421281abb7),platform=Windows NT 6.1 SP1 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 214 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:03:00'
System info: host: 'C9090DEF19ED258', ip: '172.22.46.117', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_20'
Session ID: e3c034f27280c888088da4ba7922cdee
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:\Users\kxh8178\AppData\Local\Temp\1\scoped_dir8948_22544}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=39.0.2171.95, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=true}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
    at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:89)
    at driverTest.tests.main(tests.java:33)

【问题讨论】:

    标签: java eclipse angularjs google-chrome selenium


    【解决方案1】:

    我不确定.. 但是,从您的代码看来,您正在尝试两次单击同一个元素。而且,可能第一次单击元素会导致页面刷新或其他什么,从而导致 DOM 更改,从而导致 StaleElementReferenceException

    下面的代码 sn-p 似乎是罪魁祸首:

    //1
    searchBox.findElement(By.cssSelector("button.btn.btn-default")).click();
    
    //2 
    searchBox.findElement(By.cssSelector("button.btn.btn-default"));
    searchBox.click();
    

    如您所见,代码“//1”和“//2”对元素执行相同的操作。如果您删除其中任何一个,我认为您的问题将是解决了。​​

    【讨论】:

    • 感谢他的回复,我取出了那个位,但它只是改变了错误:线程“main”org.openqa.selenium.InvalidSelectorException中的异常:无效选择器:指定了无效或非法选择器(会话信息:chrome=39.0.2171.95)
    • 我认为这里的 cssSelector 是错误的。只需将 css=button.btn.btn-default 替换为 button.btn.btn-default 就像我假设的按钮的 classname 一样。添加css 不是定义cssSelector 的方法。我已经相应地编辑了上面的代码。请检查这是否适合您。
    【解决方案2】:

    使用此代码等待元素被附加:

    boolean breakIt = true;
            while (true) {
            breakIt = true;
            try {
                // write your code here
            } catch (Exception e) {
                if (e.getMessage().contains("element is not attached")) {
                    breakIt = false;
                }
            }
            if (breakIt) {
                break;
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2019-04-23
      • 2015-02-07
      • 1970-01-01
      • 2022-08-17
      相关资源
      最近更新 更多