gpt4 book ai didi

java - Selenium WebDriver : Wait for complex page with JavaScript to load

转载 作者:IT老高 更新时间:2023-10-28 11:32:30 25 4
gpt4 key购买 nike

我有一个使用 Selenium 测试的 Web 应用程序。页面加载时运行了很多 JavaScript。
这段 JavaScript 代码写得不太好,但我无法更改任何内容。所以用 findElement() 方法等待一个元素出现在 DOM 中并不是一种选择。
我想在 Java 中创建一个通用函数来等待页面加载,一个可能的解决方案是:

  • 从 WebDriver 运行 JavaScript 脚本并将 document.body.innerHTML 的结果存储在字符串变量 body 中。
  • body 变量与之前版本的 body 进行比较。如果它们相同,则设置递增计数器 notChangedCount 否则将 notChangedCount 设置为零。
  • 稍等片刻(例如 50 毫秒)。
  • 如果页面有一段时间没有改变(例如 500 毫秒)所以 notChangedCount >= 10 然后退出循环,否则循环到第一步。

你认为这是一个有效的解决方案吗?

最佳答案

如果有人真的知道一个通​​用且始终适用的答案,那么它会在很久以前在任何地方实现,并且会让我们的生活变得如此轻松。

你可以做很多事情,但每一件事都有一个问题:

  1. 正如 Ashwin Prabhu 所说,如果你熟悉脚本,你可以观察它的行为并在 windowdocument 等上跟踪它的一些变量。这个但是,解决方案并不适合所有人,只能由您使用,并且只能在有限的一组页面上使用。

  2. 你的解决方案,通过观察HTML代码,有没有改过一段时间,还不错(另外还有a method可以直接通过WebDriver获取原始未编辑的HTML ),但是:

    • 实际断言页面需要很长时间,并且可能会显着延长测试时间。
    • 你永远不知道什么是正确的间隔。脚本可能正在下载需要超过 500 毫秒的大文件。我们公司的内部页面上有几个脚本在IE中需要几秒钟。您的计算机可能会暂时缺乏资源 - 假设防病毒软件可以让您的 CPU 充分工作,那么 500 毫秒甚至对于不复杂的脚本来说也可能太短了。
    • 有些脚本永远不会完成。它们会延迟调用自己 (setTimeout()) 并一次又一次地工作,并且每次运行时都可能更改 HTML。说真的,每个“Web 2.0”页面都会这样做。甚至堆栈溢出。您可以覆盖最常用的方法,并将使用它们的脚本视为已完成,但是……您不能确定。
    • 如果脚本做的不是改变 HTML 怎么办?它可以做数以千计的事情,而不仅仅是一些 innerHTML 乐趣。
  3. 有一些工具可以帮助您解决这个问题。即 Progress Listeners 以及 nsIWebProgressListener 和其他一些。然而,浏览器对此的支持是可怕的。 Firefox 从 FF4 开始就开始尝试支持(还在发展中),IE 在 IE9 中基本支持。

而且我想我很快就会想出另一个有缺陷的解决方案。事实是——因为永远的脚本在做他们的工作,什么时候说“现在页面已经完成”没有明确的答案。选择最适合您的,但要注意它的缺点。

关于java - Selenium WebDriver : Wait for complex page with JavaScript to load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10720325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com