栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当我使用WebDriverWait而不是Thread.sleep时,我得到了StaleElementReferenceException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当我使用WebDriverWait而不是Thread.sleep时,我得到了StaleElementReferenceException

加载页面时,我在控制台中看到了

"Loaded SwaggerUI"
三遍。那就是你的问题:SwaggerUI被加载了3次。

如何解决这个问题

所以我这样做:

  1. 我在打印出来的行上放置了一个断点

    "Loaded SwaggerUI"

  2. 我重装了。

  3. 当我达到断点时,我拍摄了具有该类的元素的快照

    resource

    var snap1 = Array.prototype.slice.call( document.getElementsByClassName("resource"))

(您必须将返回的值复制到一个

Array
(带有
slice
),因为它
getElementsByClassName
返回一个 实时 集合。)

  1. 我点击了调试器的继续按钮。

  2. 当我再次达到断点时,我拍摄了第二张快照(名为

    snap2
    )。

现在可以进行一些测试了。如果DOM没有更改,则元素应相同:

> snap1[0] === snap2[0]false

看起来不太好。让我们看看DOM树中仍然有什么:

> document.contains(snap1[0])false> document.contains(snap2[0])true

第一个快照中的元素不再在树中,而第二个快照中的元素在树中。

为什么硒错误?

2秒的等待时间足以让Selenium在DOM稳定之后开始查找元素。但是,当您告诉Selenium等待直到页面中有可见的class元素时

resource
,它就会等待直到
第一次 加载SwaggerUI 。在处理第一次找到的元素时,SwaggerUI 会加载另一个时间
,然后发现的旧元素不再在DOM树中。因此它提出了一个问题,
StaleElementReferenceException
因为它在DOM树中曾经发现的元素不再存在。它已替换为位于相同位置且结构相同的元素,但Selenium希望
完全相同的元素 而不是相同的副本。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413074.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号