使用带有 selenium-java-4.0.0 和 chromedriver v85 的开发工具时出现超时异常

XZe*_*Zen 9 java selenium google-chrome-devtools selenium-chromedriver selenium4

我正在尝试使用 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

mce*_*nak 6

打电话createSession之前先打电话试试clearBrowserCache

使用您的设置,这有效:

chromeDriver.getDevTools().createSession();
chromeDriver.getDevTools().send(Network.clearBrowserCache())
Run Code Online (Sandbox Code Playgroud)

这会产生java.util.concurrent.TimeoutException

chromeDriver.getDevTools().send(Network.clearBrowserCache())
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码段验证浏览器缓存是否已清除:

    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);
Run Code Online (Sandbox Code Playgroud)

如果运行代码,测试浏览器中显示的页面将显示以下图像: 在此处输入图片说明

如果您注释掉该行,driver.getDevTools().send(Network.clearBrowserCache());则会得到不同的结果: 在此处输入图片说明

  • 我添加了一个代码示例来验证调用“clearBrowserCache()”的结果。 (3认同)

Ron*_*yen 2

效果很好

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();
  }
Run Code Online (Sandbox Code Playgroud)