java - Selenium:离线时神秘的约 60 秒等待
问题描述
前提条件:
- 使用 chrome(以便我可以基于https://medium.com/@sahajamit/selenium-chrome-dev-tools-makes-a-perfect-browser-automation-recipe-c35c7f6a2360实现离线模式)
- 实现了有效的在线/离线切换方法(goOnline()、goOffline())
- 使所有等待方法从这里实际工作:https ://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/ (为了安全起见,消除所有“睡眠(20)”调用)
- 选择尽可能简单的目标页面(我曾经获得简单的 .jpg 文件)
代码:
...
driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
driver.get("page1_URL");
goOffline();
driver.get("page2_URL");
// dump here all the wait methods of medium.com
goOnline();
driver.get("page3_URL");
预期:Page2(例如基于 JS 的 chrome 的 T-Rex 迷你游戏)从缓存中快速加载。所以所有的阻塞等待方法都很快完成(远少于20秒),我们可以再次上线并加载page3。
实际:Page2(更好的措辞:迷你游戏)计划出于某种原因在浏览器中停留 60 秒。与此同时,Selenium 疯狂地经历了所有的等待,并尝试获取 page3。(Chrome 日志也承认这一点。)最后它在获取 page3 20 秒后超时。
问题:为什么要在这里等待 60 秒?
编辑:我没有设法从我的工作场所分享 chrome 日志。此外,手动运行上述场景,chrome 仍然保持响应(当然),我可以遍历“预期”路径。
解决方案
经过两天的挣扎(以及最近的这个问题),在最后几分钟我的代码才开始工作。然而,这个故事并没有特别的转折,我所做的只是发现 goOnline() 方法不起作用,所以尽管原始的 JSON 是有效的,但我还是重新输入了它。
goOffline()/goOnline() 方法都在调用 DevTools API 的“Network.emulateNetworkConditions”方法,“offline”属性的值为真/假。所以没有什么特别的事情可以重新上线:
private void goOffline() {
myWebSocket.send("{\"id\":" + counter++
+ ",\"method\":\"Network.emulateNetworkConditions\",\"params\":{\"offline\":true,\"latency\":0,\"downloadThroughput\":-1,\"uploadThroughput\":-1}}");
}
private void goOnline() {
myWebSocket.send("{\"id\":" + counter++
+ ",\"method\":\"Network.emulateNetworkConditions\",\"params\":{\"offline\":false,\"latency\":0,\"downloadThroughput\":-1,\"uploadThroughput\":-1}}");
}
推荐阅读
- reactjs - 如何在本地 WiFi 上公开从 WSL 运行的服务器/网站/服务?
- plsql - 有人可以请告诉我有什么问题吗?ORACLE APEX 中的 PLSQL
- sql-server - 如何为 EF 核心迁移历史记录表设置自定义名称并在生成迁移脚本时使用它?
- python - 为什么嵌套字典不能正确附加到列表中?
- javascript - 即使循环还没有完成迭代,一行代码也会运行吗?
- google-apps-script - 异常:获取对象 ContactsApp 上的方法或属性 getContactGroups 时出现意外错误
- python - cppzmq:使用 zmq::send_multipart 时对非套接字的套接字操作
- java - 对某些逻辑正确使用多态性和继承
- excel - 对现有数据应用宏
- html - 如何将元素的高度设置为等于另一个元素?(包括 Codepen)