为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2021-06-01 13:53:40
我想知道如何使用 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);    }}
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

每当 DOM 中存在的元素被删除或移除或不可用时,您都会收到 Stale 元素异常。


上面的答案(即)在 DOM 刷新后重新定位元素,或者您可以使用 Webdriver 等待,如果元素未附加到 DOM,则您可以尝试在“for 循环”中使用“try-catch 块”,如下所示


driver.manage().timeouts().implicitlywait(30,TimeUnit.SECONDS);

try{

Select drpdwns6 = new 

Select(driver.findElementByXpath("//[@id=\"MainContent_ddlBillable\"]")));

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

int count1=sels6AllOptions.size();

for(int s6=0;s6<count1;s6++) 

{

drpdwns6.selectByIndex(s6);

}

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++) {

    drpdwns7.selectByIndex(s7);

    catch(StaleElementException e2){


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

  }

  }


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信