Timed out receiving message from renderer: 0.100 log messages using ChromeDriver and Chrome v80 through Selenium Java
Interim solution
Here are the solutions for different variants of Chrome users.
-
If you are using Chrome v80, using the recently released ChromeDriver 80.0.3987.106 solves the issue.
-
Code Block:
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.quit();
-
Console Output:
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 20041 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Feb 14, 2020 9:50:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C
-
If you are using Chrome v81, using the recently released ChromeDriver 81.0.4044.20 solves the issue.
- If you are using Chrome from Dev or Canary channel you need to pickup the platform specific binaries:
- Linux (64-bit)
- Mac OS X (64-bit)
- Windows (32-bit)
Permanent Solution
However, @bugdroid
submitted the actual fix through this revision / commit which is as follows:
[ChromeDriver] suppress logging of retry loop timeout: r1924789 added a retry loop while waiting for DevTools messages. This spammed users' logs with uninformative timeout reports. This CL suppresses those log messages and correctly reports the command timeout value when appropriate.
Note:
- Status: Fixed
- Labels: ToBeReleased ChromeDriver-82
History
This error message...
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
...does not necessarily indicate a failure.
As @Tricia mentions that, ChromeDriver Version 80 modified a wait loop to allow more retries; this loop will generate that message, but it continues to listen. However the SEVERE tag for that message is misleading.
Further, in the discussion Issue 3332: Retry timeout logged as severe, @triciac [ChromeDriver Committer] also added that, ChromeDriver team added a small timeout (100 ms) to DevToolsClientImpl::HandleEventsUntil
to enable additional checking of navigation status. But, unfortunately when this timeout was expiring, it is logged as SEVERE (by ProcessNextMessage
). In the case of this small timeout, it should not log as SEVERE, although timeouts from SendCommandInternal
still should.
So ChromeDriver needs a way to control the logging in a better way, possibly by increasing the timeout. However, if the command finally times out, the timeout duration listed being very small, then it is needed to list the user-defined timeout instead.
Immediate solution
As an interim solution, you can downgrade to ChromeDriver v79.0.3945.36 as it seems the SEVERE logs doesn't shows up in the console but you will observe the WARNING:
[WARNING]: This version of ChromeDriver has not been tested with Chrome version 80
which sounds like a ...safe workaround... and had been confirmed by a Chromium team member.
-
Code Block:
public class A_Chrome { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com/"); driver.quit(); } }
-
Console Output:
Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9200 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. [1581503845.444][WARNING]: This version of ChromeDriver has not been tested with Chrome version 80. Feb 12, 2020 4:07:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C
tl; dr
You can find a couple of relevant discussions in:
- Issue 3333: ChromeDriver may block indefinitely while waiting for pending navigation after net::ERR_CONTENT_DECODING_FAILED
- Issue 3336: WebDriver 80.0.3987.16 can't open Chrome on Linux
Root cause: Whenever you are loading some page with the help of selenium driver, then driver
script wait till page is completely loaded. But sometimes webdriver takes more time to load a page, in that case, you will see the TimeoutException
exception in your console.
Solution: When Page Loading takes too much time and you need to stop downloading additional subresources (images, CSS, js, etc) you can change the pageLoadStrategy through the webdriver.
Below code just load the html content from page. You can set page load strategy from chromeoptions
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Updated Solution -2: I agree with DebanjanB, PageLoad strategy with None, without download additional files (images, CSS, js, etc) is not a good idea while performing testing. I did search for all issues about it and try to find a valid solution. I tried the below options as sometimes at some point it was able to resolve this issue.
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
None of them helped But I found one solution again with the Page load strategy. This time we are downloading all subresources but we are waiting for the DOMContentLoaded event. This strategy called Eager. A small definition of available all 3 pageload strategies
1. normal: This strategy causes Selenium to wait for the full page loading (HTML content and sub-resources downloaded and parsed).
2. eager: This strategy causes Selenium to wait for the DOMContentLoaded event (HTML content downloaded and parsed only).
3. none : This strategy causes Selenium to return immediately after the initial page content is fully received (HTML content downloaded).
NOTE: By default, when Selenium loads a page, it follows the normal pageLoadStrategy.
Code snippet without using Pageload strategy (Or Normal as used by selenium by default)
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Console Output:
Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 41540 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Feb 11, 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C [1581412933.937][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.066][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.168][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.360][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.461][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.618][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.719][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.820][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.922][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412935.097][SEVERE]: Timed out receiving message from renderer: 0.100 21
With PageLoad Strategy - Eager :
Code Snippet:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Console Output:
Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 1175 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Feb 11, 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C
21