如何在循环浏览所有按钮时解决Stale元素?

时间:2018-05-23 08:37:11

标签: java selenium testing xpath css-selectors

作为更大测试的一部分,我必须单击没有指定ID的特定按钮。在stackoverflow上浏览和尝试各种其他解决方案后,我想简单地遍历所有按钮 - 然后考虑如何单独选择它并单击它。这是代码:

    List<WebElement> buttons = driver.findElements(By.cssSelector(".btn.btn-primary"));
    for (WebElement b:buttons) {
        System.out.println(b.getTagName());
        System.out.println(b.getText());
    }

使用Jquery动态生成按钮。实际网页只是.js引用的集合。这是我从Inspect Element获得的代码:

<div class="modal-footer">
    <button class="btn btn-primary" type="button" data-bb-handler="yes">Task Status</button>
    <button class="btn btn-primary" type="button" data-bb-handler="danger">Close</button>
</div>

此网页上有超过20个按钮(此阶段几乎看不到4-5个)。目前,有一个弹出窗口(背景已褪色),有两个按钮,如上面的代码部分所示。

在selenium中,它会在StaleElementReferenceException: stale element reference: element is not attached to the page document的行上投放 b.getTagName()

不确定可能导致此问题的原因。已经尝试过: 1.隐含地等待30秒。 2. XPath选择器 3.在循环中轮询多次并尝试捕获块 ......正如其他答案所述。为所有可能的解决方案获得相同的例外。

可能导致这种情况的原因是什么?

P.S。无法共享屏幕截图,因为这是一个适当的企业应用程序。

2 个答案:

答案 0 :(得分:0)

一种解决方法是将其放在try-catch块中,捕获StaleElementReferenceException并且不执行任何操作。

答案 1 :(得分:0)

来自documentation

  

在两种情况之一中抛出过时的元素引用异常,   第一个比第二个更常见:

     
      
  • 该元素已被完全删除。
  •   
  • 元素不再存在   附在DOM上。
  •   

这些是可能导致此异常的常见原因。

在你的问题中,没有很多信息,但考虑到你所写的内容,似乎你是:

  • 使用css选择器获取所有元素的引用&#34; .btn.btn-primary&#34;
  • 执行某些操作(更改DOM)
  • 并尝试与之前的参考文献进行交互。

如果您这样做,则在尝试获取标记名/文本时需要重新定位元素driver.findElements(By.cssSelector(".btn.btn-primary"))