如何解决将开发工具与selenium-java-4.0.0和chromedriver v85一起使用时发生超时异常
我正在尝试使用Selenium开发工具Java API,对于多种API方法,我正在使用java.util.concurrent.TimeoutException
。
例如,我正在尝试使用Network.clearbrowserCache
,它应该可以在chromedriver文档中起作用:https://chromedevtools.github.io/devtools-protocol/tot/Network/
我正在使用以下代码致电clearbrowserCache
:
chromeDriver.getDevTools().send(Network.clearbrowserCache())
它失败,但是同时如果我使用其他devTools命令,例如:
chromeDriver.getDevTools().send(browser.getVersion())
它正确返回数据。
- Chrome版本为:85.0.4183.39
- Chromedriver版本为:85.0.4183.87
- Selenium-java版本为:4.0.0-alpha-6
解决方法
在致电createSession
之前先致电clearBrowserCache
。
使用您的设置,该方法有效:
chromeDriver.getDevTools().createSession();
chromeDriver.getDevTools().send(Network.clearBrowserCache())
这将产生java.util.concurrent.TimeoutException
:
chromeDriver.getDevTools().send(Network.clearBrowserCache())
您可以使用以下代码段清除浏览器缓存:
ChromeDriver driver = new ChromeDriver();
driver.get("https://refreshyourcache.com/en/cache-test/");
Thread.sleep(2000);
driver.getDevTools().createSession();
driver.getDevTools().send(Network.clearBrowserCache());
driver.get("https://refreshyourcache.com/en/cache-test/");
Thread.sleep(5000);
如果您对driver.getDevTools().send(Network.clearBrowserCache());
行表示赞赏,则会得到不同的结果:
通过google-chrome-devtools使用 Selenium 4.0.0-alpha-6 , Chrome v85 和 ChromeDriver v85.0 ,您必须能够使用getVersion()
方法,如下所示:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.browser.Browser;
public class BrowserGetVersion {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","C:\\WebDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
ChromeDriver driver = new ChromeDriver(options);
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Browser.getVersion());
}
}
类似地,使用clearBrowserCache()
方法,您应该能够使用以下代码块清除浏览器缓存:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.network.Network;
public class ClearChromeCache {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","C:\\WebDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
ChromeDriver driver = new ChromeDriver(options);
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.clearBrowserCache());
driver.get("https://www.google.com/");
}
}
其他注意事项
此外,您还可以使用setCacheDisabled(true)
完全禁用 缓存,如下所示:
代码块:
import java.util.Collections;
import java.util.Optional;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.network.Network;
import org.testng.Assert;
import org.testng.annotations.Test;
public class testngBasic {
@Test
public void foo() {
System.setProperty("webdriver.chrome.driver","C:\\WebDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension",false);
ChromeDriver driver = new ChromeDriver(options);
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.clearBrowserCache());
devTools.send(Network.enable(Optional.empty(),Optional.empty(),Optional.of(100000000)));
devTools.send(Network.setCacheDisabled(true));
devTools.addListener(Network.responseReceived(),responseReceived -> Assert.assertEquals(false,responseReceived.getResponse().getFromDiskCache()));
driver.get("https://www.google.com/");
}
}
此用例
可能您的代码与java.util.concurrent.TimeoutException
错误无关,真正的问题是与:
- jdk 版本
- 番石榴版本
解决方案
确保:
- JDK 已升级到当前级别JDK 8u252。
- 番石榴已升级为 guava-29.0-jre 。
Outro
Disable cache in Selenium Chrome Driver
,效果很好
public void testCdt {
final ChromeLauncher launcher = new ChromeLauncher();
final ChromeService chromeService = launcher.launch(false);
final ChromeTab tab = chromeService.createTab();
final ChromeDevToolsService devToolsService = chromeService.createDevToolsService(tab);
final Page page = devToolsService.getPage();
Network network = devToolsService.getNetwork();
// Clear browser cached
network.clearBrowserCache();
// Log requests with onRequestWillBeSent event handler.
network.onRequestWillBeSent(
event ->
System.out.printf(
"request: %s %s%s",event.getRequest().getMethod(),event.getRequest().getUrl(),System.lineSeparator()));
network.onLoadingFinished(
event -> {
chromeService.closeTab(tab);
launcher.close();
});
network.enable();
page.navigate("http://github.com");
devToolsService.waitUntilClosed();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。