Selenium WebDriver StaleElementReferenceException。

Selenium webdriver中有StaleElementReferenceException。顾名思义,“陈旧”一词指的是不是新的和灭亡的东西。在某些情况下,由于DOM的修改,以前在DOM中存在的元素现在不再可用。

在这种情况下,如果我们尝试访问该元素,则会引发StaleElementReferenceException。由于以下原因,遇到这种类型的异常-

  • 元素不再存在于DOM中。

  • 该元素已完全删除。

我们可以通过某些方法来防止StaleElementReferenceException发生,如下 -

我们可以重新加载网页并尝试与同一元素进行交互。

driver.navigate().refresh();
driver.findElement(By.id("txt")).sendKeys("Selenium");

我们可以添加一个try catch块并与同一元素进行交互。在这里,对于for循环,应该进行五次尝试。如果在五次尝试之前识别出该元素,则应退出循环。

for(int k=0; k<=5;k++){
   try{
      driver.findElement(By.id("txt")).sendKeys("Selenium");
      break;
   }
   catch(Exception exp){
      System.out.println(exp.message());
   }
}

为了防止StaleElementReferenceException我们可以添加明确的等待 [同步]等待,直到元素元素在DOM渲染与预期条件的帮助presenceOfElementLocated

w.until(ExpectedConditions.presenceOfElementLocated(By.name("presence")));