ruby Selenium Webdriver -刷新过时元素快捷方式?

q5iwbnjs  于 2023-02-03  发布在  Ruby
关注(0)|答案(3)|浏览(129)

我正在为我的Rails应用程序编写一个Selenium测试,有时会遇到“Stale Element”异常。在对元素进行操作之前,对元素执行另一次查找是很容易的,但是为了保持代码干燥,我想知道--Selenium::WebDriver::Element对象上是否有某种方法可以“刷新”过时的引用?
编辑:为了澄清,我想问一下是否有一些速记方法可以在传递相同参数的情况下执行另一个find_by_xpath(或id等)调用。它的功能非常完善,只是不像某种“刷新”方法那样简洁。

kt06eoxx

kt06eoxx1#

如果我理解正确的话,您是在询问WebElement示例上的某种“refresh”或“update”方法。
不幸的是,selenium中没有定义这样的东西,根据相关问题WebElement refresh() or getBy() needed
WebElement对象是一个代理,是DOM元素的代表,当DOM元素被浏览器破坏时,WebElement被标记为“stale”,不能再使用。
如果你在另一个页面上有一个 similar DOM元素,你可以用findElement获取它,Selenium会为这个 new DOM元素创建一个 new WebElement对象(一个代理)。你的旧WebElement对象将保持陈旧,因为底层DOM对象被破坏,并且永远无法恢复。
我建议存储特定于元素的定位器,但是一旦页面刷新,您仍然需要通过定位器“重新查找”元素。

plicqrtu

plicqrtu2#

唯一可用的方法是在编写Selenium代码时跟踪应用程序状态。
您是否执行了刷新DOM的操作?然后,您需要执行另一个findElement调用,以获得您接下来要交互的元素的新示例。
否则,在Utility类中编写您自己的方法findElementByXpath,该方法尝试查找元素,捕获StaleElement异常并重试。

jslywgbw

jslywgbw3#

我将描述我的情况,这是类似的:我尝试通过执行以下操作来查找具有某个值的表格单元格:
1.获取所有表行
1.对于每一行-获取列的集合
1.对于每列-求出值
有一天,我遇到了一个表中结果太多的情况。于是,我编写了一个循环,点击"获取下一页"链接/图标。简单吗?不!当程序点击"表的下一页"链接时,指向表的WebElement不可用,我收到了与本问题作者相同的错误:失效元素引用异常
我所做的是:
首先获取表的XPATH,然后我更改了循环,这样如果扫描了所有行,但没有找到值,并且启用了下一个图标:
1.单击表格的下一页。
1.更新WebElement以重新指向表。
我希望我说清楚了。

相关问题