2016-11-14 92 views
0

我试图自动化一个方案,其中的条件是我必须选择所有的下拉选项,我必须逐个单击该选项。我尝试了代码,但它只点击第一个选项,并显示错误为陈旧元素不可点击。 请帮忙。硒webdriver中的陈旧元素异常

+0

您应该确保页面已加载并且所有请求都已完成,之后您可以搜索您的元素。 – lauda

+0

你使用POM吗?如果是的话,我可以提出一些建议。 –

+0

是的,请告诉我 – Test

回答

0

StaleElementException发生如果我找到一个元素,DOM得到更新,然后我尝试与元素进行交互。

那么我该如何处理呢?使用下面的方法点击试图单击元素多次:

public boolean retryingFindClick(By by) { 
     boolean result = false; 
     int attempts = 0; 
     while(attempts < 2) { 
      try { 
       driver.findElement(by).click(); 
       result = true; 
       break; 
      } catch(StaleElementException e) { 
      } 
      attempts++; 
     } 
     return result; 
} 

采取了这种外观极好的解决方案,从here

0

当你从下拉菜单中选择一个选项时,你的DOM也会得到更新。所以,你也需要更新你的对象。请参阅示例代码片段:

Select select = new Select(driver.findElement(By.cssSelector("your dropdown's locator"))); // you may use any locator of your choice 
    List<WebElement> options = select.getOptions(); 

    for(WebElement option : options){ 
      select.selectByVisibleText(option.getText()); 

      //re-assign your select object since your page has been reloaded after selecting an option 
      select = new Select(driver.findElement(By.cssSelector("your dropdown's locator"))); 
    } 
+0

试过这一个,但显示相同 – Test