硒:离线时神秘等待约60秒

时间:2018-10-09 08:26:08

标签: java selenium google-chrome offline

前提条件

代码

...
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仍然可以响应(当然),我可以遍历“预期”路径。

1 个答案:

答案 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}}");
}