首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在遍历所有按钮时解析陈旧元素?

如何在遍历所有按钮时解析陈旧元素?
EN

Stack Overflow用户
提问于 2018-05-23 08:37:10
回答 2查看 461关注 0票数 2

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

代码语言:javascript
运行
复制
    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元素获得的代码:

代码语言:javascript
运行
复制
<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.在循环中多次轮询并尝试捕获块.正如其他答案所提到的。为所有可能的解决方案获得相同的异常。

是什么导致了这一切?

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

EN

回答 2

Stack Overflow用户

发布于 2018-05-23 13:58:56

解决方法之一是将其放入一个try-catch块中,捕获StaleElementReferenceException,然后什么也不做。

票数 0
EN

Stack Overflow用户

发布于 2018-05-23 17:24:16

来自文档

在两种情况中的一种情况下抛出陈旧元素引用异常,第一种情况比第二种情况更常见:

  • 元素已被完全删除。
  • 元素不再附加到DOM。

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

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

  • 使用css选择器".btn.btn-primary"获取所有元素的引用
  • 执行一些操作(更改DOM)
  • 在尝试与前面的引用交互之后。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50483614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档