作为更大测试的一部分,我必须单击一个没有分配ID的特定按钮。在浏览并尝试了堆栈溢出上的各种其他解决方案后,我想简单地遍历所有按钮 - 然后考虑如何单独选择它并单击它。代码如下:
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 个(。目前,有一个弹出窗口(背景褪色(,其中包含两个按钮,如上面的代码部分所示。
在硒中,它把StaleElementReferenceException: stale element reference: element is not attached to the page document
扔在说b.getTagName()
的线上
。不确定可能导致此问题的原因。已经尝试过: 1. 隐式等待 30 秒。 2.XPath
选择器 3. 在循环中多次轮询和 try-catch 块 ...正如其他答案中提到的。为所有可能的解决方案获得相同的异常。
可能是什么原因造成的?
附言无法共享屏幕截图,因为这是一个专有的企业应用程序。
一种解决方法是将其放在try-catch块中,捕获StaleElementReferenceException并且什么都不做。
从文档中:
在以下两种情况之一中引发过时元素引用异常,即 第一个比第二个更常见:
- 该元素已被完全删除。
- 元素不再 附加到 DOM。
以下是可能导致此异常的常见原因。
在你的问题中,没有很多信息,但考虑到你写的内容,你似乎是:
- 使用 CSS 选择器".btn.btn-primary">获取所有元素的引用
- 执行一些操作(更改 DOM(
- 并在尝试与以前的引用进行交互之后。
如果这样做,则需要在尝试获取标记名/文本时重新定位driver.findElements(By.cssSelector(".btn.btn-primary"))
元素。