前提条件:
代码:
...
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仍然可以响应(当然),我可以遍历“预期”路径。
答案 0 :(得分:0)
经过两天的苦苦挣扎(以及这个最近的问题),在最后一分钟我的代码才开始工作。故事没有特别的变化,我所做的只是发现goOnline()方法不起作用,因此尽管原始的JSON有效,但无论如何我都重新键入了它。
goOffline()/ goOnline()方法都在调用DevTools API的“ Network.emulateNetworkConditions”方法,并且“ offline”属性的值为true / false。因此,重新上线没有什么特别的事情:
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}}");
}