Timeout exception when using dev tools with selenium-java-4.0.0 and chromedriver v85 Timeout exception when using dev tools with selenium-java-4.0.0 and chromedriver v85 selenium selenium

Timeout exception when using dev tools with selenium-java-4.0.0 and chromedriver v85


Try calling createSession before calling clearBrowserCache.

Using your setup, this works:

chromeDriver.getDevTools().createSession();chromeDriver.getDevTools().send(Network.clearBrowserCache())

and this produces java.util.concurrent.TimeoutException:

chromeDriver.getDevTools().send(Network.clearBrowserCache())

You can verify that the browser cache has been cleared with this snippet:

    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);

If you run the code, the pages displayed in the test browser will show these images:enter image description here

If you commment out the line driver.getDevTools().send(Network.clearBrowserCache()); then you get a different result:enter image description here


Using Selenium 4.0.0-alpha-6, Chrome v85 and ChromeDriver v85.0 through you must be able to use getVersion() method as follows:

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());    }}

Similarly, using the clearBrowserCache() method you should be able to clear the browser cache using the following code block:

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

Additional Consideration

Additionally, you can also use setCacheDisabled(true) to completely disable the cache as follows:

Code Block:

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

This usecase

Possibly your code have nothing to do with java.util.concurrent.TimeoutException error and the real issue is either with the:

  • jdk version
  • guava version

Solution

Ensure that:

  • JDK is upgraded to current levels JDK 8u252.
  • guava is upgraded to guava-29.0-jre.

Outro

Disable cache in Selenium Chrome Driver


It worked fine

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();  }