org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM

时间:2016-10-25 09:47:51

标签: java selenium selenium-webdriver

从下拉列表中选择一个选项并将其作为字符串获取时,我收到“StaleElementReferenceException”。过去两天我对这个问题非常失望,我没有得到任何最好的建议来解决我的问题。我对硒很新,请帮我解决这个问题。

public static WebElement prepProduct(WebDriver driver) throws InterruptedException
{
    WebDriverWait wait = new WebDriverWait(driver,20);
    Boolean enable=driver.findElement(By.xpath(".//*[@id='batch-update-prep-owner']")).isEnabled();
    if(enable.TRUE)
    {
        Select whoPrepsMerchant= new Select(driver.findElement(By.xpath(".//*[@id='prep-items']/tr[2]/td[5]/select")));
        whoPrepsMerchant.selectByIndex(new Random().nextInt(whoPrepsMerchant.getOptions().size()));
        String merchant=whoPrepsMerchant.getFirstSelectedOption().getText();
        Thread.sleep(3000);
        String whoPrepsvalue=(driver.findElement(By.xpath(".//*[@id='prep-items']/tr[2]/td[7]/span"))).getText();
        System.out.println("outer");
        if(merchant.equalsIgnoreCase("Amazon"))
        {
            System.out.println("inner");
            if(!whoPrepsvalue.equalsIgnoreCase("--"))
            {
                System.out.println("innerone");
                Thread.sleep(3000);
                driver.findElement(By.xpath(".//*[@id='continue-plan']")).click();  
            }
        }
        else
        {
            if(whoPrepsvalue.equalsIgnoreCase("--"))
            {
                System.out.println("innertwo");
                Thread.sleep(3000);
                driver.findElement(By.xpath(".//*[@id='continue-plan']")).click();
            }
        }
    }
    else
    {
        Thread.sleep(3000);
        driver.findElement(By.xpath(".//*[@id='continue-plan']")).click();
    }
    return element;
}  

错误日志:

org.openqa.selenium.StaleElementReferenceException: Element is no longer attached to the DOM
Command duration or timeout: 15 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '3.0.0-beta4', revision: '3169782', time: '2016-09-29 10:29:23 -0700'
System info: host: '7531HY1', ip: '10.45.183.77', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_111'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=45.4.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 2eb3cd2b-e2e0-4efb-8b4c-3eb08f00ed45
*** Element info: {Using=tag name, value=option}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:636)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:284)
    at org.openqa.selenium.remote.RemoteWebElement.findElements(RemoteWebElement.java:203)
    at org.openqa.selenium.remote.RemoteWebElement.findElementsByTagName(RemoteWebElement.java:280)
    at org.openqa.selenium.By$ByTagName.findElements(By.java:327)
    at org.openqa.selenium.remote.RemoteWebElement.findElements(RemoteWebElement.java:179)
    at org.openqa.selenium.support.ui.Select.getOptions(Select.java:70)
    at org.openqa.selenium.support.ui.Select.getFirstSelectedOption(Select.java:94)
    at NAGamma.SellerCentralPOM.prepProduct(SellerCentralPOM.java:85)
    at NAGamma.Regression.main(Regression.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:646)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1137)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:753)
    at org.testng.TestRunner.run(TestRunner.java:607)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:368)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321)
    at org.testng.SuiteRunner.run(SuiteRunner.java:270)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
    at org.testng.TestNG.runSuites(TestNG.java:1124)
    at org.testng.TestNG.run(TestNG.java:1096)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)
Caused by: org.openqa.selenium.StaleElementReferenceException: Element is no longer attached to the DOM
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '3.0.0-beta4', revision: '3169782', time: '2016-09-29 10:29:23 -0700'
System info: host: '7531HY1', ip: '10.45.183.77', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_111'
Driver info: driver.version: unknown
    at <anonymous class>.fxdriver.cache.getElementAt(resource://fxdriver/modules/web-element-cache.js:9531)
    at <anonymous class>.Utils.getElementAt(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:9916)
    at <anonymous class>.FirefoxDriver.prototype.findElementsInternal_(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:11205)
    at <anonymous class>.FirefoxDriver.prototype.findChildElements(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:11226)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12698)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12703)
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/kesavamp/AppData/Local/Temp/anonymous980588199586178216webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12645)

1 个答案:

答案 0 :(得分:0)

试试这个

在全球范围内宣布

WebDriverWait wait = new WebDriverWait(driver, 5);

从下拉菜单中选择选项之前

// while the following loop runs, the DOM changes - 
// page is refreshed, or element is removed and re-added
wait.until(presenceOfElementLocated(By.id("container-element")));        

// now we're good - let's click the element

从下拉列表中选择选项。

driver.findElement(By.id("foo")).click();
相关问题