使用 for 循环嵌套下拉列表会导致过时的元素引用错误

我想知道如何使用 java 使用 selenium webdriver 嵌套下拉列表,即,我有 2 个下拉列表,这些下拉列表可以一个接一个嵌套吗?在为下拉列表循环 2 次后,它显示过时的元素引用错误


我编写了以下代码:


Select drpdwns6 = new Select(driver.findElement(By.xpath("//*[@id=\"MainContent_ddlBillable\"]")));

List <WebElement> sels6 = drpdwns6.getOptions();

sels6.size();

for(int s6=0;s6<sels6.size();s6++) {

    drpdwns6.selectByIndex(s6);

    System.out.println("selected value"+s6);


    Select drpdwns7 = new Select(driver.findElement(By.xpath("//*[@id=\"MainContent_ddlofflinestatus\"]")));

    List <WebElement> sels7 = drpdwns7.getOptions();

    sels7.size();

    for(int s7=0;s7<sels7.size();s7++) {

        drpdwns7.selectByIndex(s7);

        System.out.println("selected value"+s7);

    }

}


潇潇雨雨
浏览 144回答 2
2回答

胡说叔叔

每当 DOM 中存在的元素被删除或移除或不可用时,您都会收到 Stale 元素异常。上面的答案(即)在 DOM 刷新后重新定位元素,或者您可以使用 Webdriver 等待,如果元素未附加到 DOM,则您可以尝试在“for 循环”中使用“try-catch 块”,如下所示driver.manage().timeouts().implicitlywait(30,TimeUnit.SECONDS);try{Select drpdwns6 = new&nbsp;Select(driver.findElementByXpath("//[@id=\"MainContent_ddlBillable\"]")));List <WebElement> sels6AllOptions = drpdwns6.getOptions();int count1=sels6AllOptions.size();for(int s6=0;s6<count1;s6++)&nbsp;{drpdwns6.selectByIndex(s6);}&nbsp;}catch(StaleElementException e1){System.out.println("selected value"+s6);}try{Select drpdwns7 = new Select(driver.findElement(By.xpath("//*[@id=\"MainContent_ddlofflinestatus\"]")));List <WebElement> sels7AllOptions = drpdwns7.getOptions();int count2=sels7AllOptions.size();for(int s7=0;s7<count2;s7++) {&nbsp; &nbsp; drpdwns7.selectByIndex(s7);&nbsp; &nbsp; catch(StaleElementException e2){&nbsp; &nbsp; System.out.println("selected value"+s7);&nbsp; }&nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java