【问题标题】:Stale element Exception in selenium webdriverselenium webdriver中的陈旧元素异常
【发布时间】:2023-04-04 12:23:01
【问题描述】:

我试图自动化一个场景,条件是我必须选择所有下拉选项,并且我必须一个一个地单击这些选项。我尝试了代码,但它只点击了第一个选项,并且显示错误,因为陈旧的元素不可点击。 请帮忙。

【问题讨论】:

  • 您应该确保页面已加载并且所有请求都已完成,然后您可以搜索您的元素。
  • 你在使用 POM 吗?如果是,我可以提出一些建议。
  • 是的,请告诉我
  • 请提供您的 html 部分

标签: java eclipse selenium selenium-webdriver


【解决方案1】:

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获取这个优秀的解决方案。

【讨论】:

    【解决方案2】:

    当您从下拉列表中选择一个选项时,您的 DOM 也会更新。所以,你也需要更新你的对象。见示例代码sn -p:

        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")));
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多