0

下面的代码在线程“main”中失败并出现异常org.openqa.selenium.StaleElementReferenceException: Element not found in the cache... error.
为什么它没有在 try 块中捕获我的异常?

    WebElement listbox = driver.findElement( By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountryList"));
    Select listboxSelect = new Select(listbox);

    //the textbox on the right
    WebElement textbox = driver.findElement(By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountriesSelected"));


    int attempts = 0;
    while(textbox.getText() != Contry && attempts < 5)
    {
        attempts++;
        //make your selection in the select list
        listboxSelect.selectByVisibleText(Contry);

        //click the add button( or use the double click action )
        //addCountryButton.click();
        action3.perform();
        System.out.println("before the try");
        //wait for the textbox to be populated
        WebDriverWait wait = new WebDriverWait(driver, 10);
        try
        {
            System.out.println("try no "+attempts);
            wait.until(ExpectedConditions.textToBePresentInElement(By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountriesSelected"), Contry));

        }
        catch (Exception e){
        System.out.println(e.toString());
        }catch (Error e){
        System.out.println(e.toString());
        }
    }

异常的堆栈跟踪:

Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Command duration or timeout: 1.11 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:15:02'
System info: host: 'LCDKHQ087061', ip: '192.168.2.104', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_45'
Session ID: d0861e29-c67b-43ec-beb2-00c4bf29e38e
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=25.0, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
    at org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:152)
    at mytestpack.JavaExport.DocContrySiteRole(JavaExport.java:250)
    at mytestpack.UseInformationArray.UseArray(UseInformationArray.java:24)
    at mytestpack.mytestclass.main(mytestclass.java:33)
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Element not found in the cache - perhaps the page has changed since it was looked up
Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:15:02'
System info: host: 'LCDKHQ087061', ip: '192.168.2.104', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_45'
Driver info: driver.version: unknown
    at <anonymous class>.fxdriver.cache.getElementAt(resource://fxdriver/modules/web_element_cache.js:7615)
    at <anonymous class>.Utils.getElementAt(file:///C:/Users/hlyl/AppData/Local/Temp/anonymous7115004136812534907webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:7233)
    at <anonymous class>.WebElement.getElementText(file:///C:/Users/hlyl/AppData/Local/Temp/anonymous7115004136812534907webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:10292)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/hlyl/AppData/Local/Temp/anonymous7115004136812534907webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:10844)
    at <anonymous class>.fxdriver.Timer.prototype.setTimeout/<.notify(file:///C:/Users/hlyl/AppData/Local/Temp/anonymous7115004136812534907webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:396)
4

4 回答 4

1

只需尝试将上面的整个代码包装在try catch块中,因为似乎没有从包含的包围的 try 块中抛出异常System.out.println("try no "+attempts);

try
{
    WebElement listbox = driver.findElement( By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountryList"));
    Select listboxSelect = new Select(listbox);

    //the textbox on the right
    WebElement textbox = driver.findElement(By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountriesSelected"));


    int attempts = 0;
    while(textbox.getText() != Contry && attempts < 5)
    {
        attempts++;
        //make your selection in the select list
        listboxSelect.selectByVisibleText(Contry);

        //click the add button( or use the double click action )
        //addCountryButton.click();
        action3.perform();
        System.out.println("before the try");
        //wait for the textbox to be populated
        WebDriverWait wait = new WebDriverWait(driver, 10);
        try
        {
            System.out.println("try no "+attempts);
            wait.until(ExpectedConditions.textToBePresentInElement(By.id("ctl00_PlaceHolderMain_SiteDocumentUploadWizard_Wizard1_lsbCountriesSelected"), Contry));

        }
        catch (Exception e){
            System.out.println(e.toString());
        }catch (Error e){
            System.out.println(e.toString());
        }
    }
    catch (Exception e){
        System.out.println(e.toString());
    }catch (Error e){
        System.out.println(e.toString());
    }
} catch (Exception e){
    System.out.println(e.toString());
}catch (Error e){
    System.out.println(e.toString());
}
于 2013-11-14T07:06:38.660 回答
0

由于这是 selenium,因此您需要确保代码正在尝试访问您认为它在 DOM 中访问的内容。

http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp

很可能是 textBox.getText 抛出了异常,尽管没有行号就不清楚了。

于 2013-11-14T10:56:21.367 回答
0

一些异常仅继承Throwable尝试捕获该异常并查看它是否有效。

于 2013-11-14T07:01:54.577 回答
0

StaleElementReferenceException那么它必须是一个运行时异常,如果它被抛出那里,它就会在你的 try / catch 块中被捕获。

在您的代码中找到行 ( JavaExport.java:250) 并确保您尝试在那里捕获它。

于 2013-11-14T08:31:31.710 回答