过时元素引用:识别异常的来源
在执行 WebDriver 测试时遇到“过时元素引用”异常可能会令人沮丧。让我们深入研究错误的详细信息,并探索解决此问题的解决方案。
错误概述
当 WebDriver 尝试执行以下操作时,会发生“过时元素引用”异常:与不再属于 DOM 一部分的元素进行交互。发生这种情况的原因有多种,例如:
代码示例
提供的代码片段展示了可能发生此错误的场景:
<code class="java">public static void main(String[] args) throws InterruptedException { // ... List<WebElement> LeftNavLinks = driver.findElements(By.xpath("//*[@id='sliding-navigation']//a")); for (WebElement e : LeftNavLinks) { if(e.getText().equals("Benefit Status")) { driver.findElement(By.xpath(String.format("//*[@id='sliding-navigation']/li[%s]/a", i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } i++; } }</code>
异常原因
根据提供的 HTML 结构,当尝试使用 xpath //*[@id='divContentHolder']/div[1]/ 单击元素时,可能会发生错误一个[1]。这可能是因为在初始导航和元素检索后元素被删除或更改。
解决方案
要解决此问题,您可以实现一种机制来处理过时元素引用异常。一种方法是捕获异常并重试该操作,如以下代码片段所示:
<code class="java">try { driver.findElement(By.xpath("//*[@id='divContentHolder']/div[1]/a[1]")).click(); } catch (org.openqa.selenium.StaleElementReferenceException ex) { // Retry the action here driver.findElement(By.xpath("//*[@id='divContentHolder']/div[1]/a[1]")).click(); }</code>
附加注释
以上是为什么我在 WebDriver 测试中收到'过时元素引用”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!