加载页面时,我在控制台中看到了
"Loaded SwaggerUI"三遍。那就是你的问题:SwaggerUI被加载了3次。
如何解决这个问题
所以我这样做:
我在打印出来的行上放置了一个断点
"Loaded SwaggerUI"
。我重装了。
当我达到断点时,我拍摄了具有该类的元素的快照
resource
:var snap1 = Array.prototype.slice.call( document.getElementsByClassName("resource"))
(您必须将返回的值复制到一个
Array(带有
slice),因为它
getElementsByClassName返回一个 实时 集合。)
我点击了调试器的继续按钮。
当我再次达到断点时,我拍摄了第二张快照(名为
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希望
完全相同的元素 而不是相同的副本。



