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:
If you commment out the line driver.getDevTools().send(Network.clearBrowserCache());
then you get a different result:
Using Selenium 4.0.0-alpha-6, Chrome v85 and ChromeDriver v85.0 through google-chrome-devtools 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
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(); }