正如您在问题中提到的,如果 被测应用程序 ( AUT* )使用 Javascript 或 AJAX调用
,则加载整个页面所花费的时间过多(尤其是在某些资源不可用时) 。 __ *
- 在您的第一个场景中,你已经引起双方
set_page_load_timeout(5)
和set_script_timeout(5)
set_page_load_timeout(time_to_wait)
:设置在引发异常之前等待页面加载完成的时间。set_script_timeout(time_to_wait)
:设置脚本在execute_async_script
调用期间应等待的时间(引发异常)。
因此, 在 两种情况 下,被测应用程序均 依赖 Javascript 或 AJAX调用 会引发 TimeoutException 。
在第二种情况下,您同时引出
implicitly_wait(2)
和WebDriverWait(driver, 2, 0.5)
。implicitly_wait(time_to_wait)
:将超时设置为隐式等待找到元素或命令完成。WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
:将超时设置与不同expected_conditions
- 但是您正在 经历很长的超时时间(40+秒), 因为 文档中 已明确提到 不要将隐式和显式等待混合使用,否则可能导致无法预测的等待时间
警告
:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。
解决方案:
最好的解决方案是删除的所有实例
implicitly_wait(time_to_wait)并替换
WebDriverWait()为以使
被测应用程序(AUT) 保持稳定的行为。
更新资料
根据您的反问题,当前代码块看起来很完美。的时候,你看到的测量
time used: 44.6049938202 s是所需的时间 网页
完全和功能加载对于所需要的时间 客户端 (即 Web浏览器 来控制返回到) webdriver的 情况下,一旦
“document.readyState ‘ 等于 “完成” 。 Selenium
或作为用户,您无法控制此渲染过程。但是,为了获得更好的性能,您可以遵循以下最佳做法:
- 保持您的 JDK 版本当前为最新状态 Java SE Development Kit 8u162
- 保持您的 Selenium Client 版本当前为 selenium 3.9.0的 最新版本 __
- 保持您的 WebDriver 版本更新。
- 保持您的 Web浏览器 版本更新。
- 定期在IDE中清理 项目工作区 ,以仅使用所需的依赖项来构建项目。
- 在执行 Test Suite 之前和之后,使用 CCleaner 工具清除OS杂项。 __
- 如果您的 Web浏览器 基本版本太旧,请通过 Revo Uninstaller 卸载 Web浏览器 ,然后安装最新发布的GA版本的 Web浏览器 。 __ __
- 执行 测试 。



