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