Root cause: Whenever you are loading some page with the help of selenium driver, then driver script wait till page is completely loaded. But sometime webdriver takes more time to load page, in that case you will see TimeoutException exception in your console.
Solution: When Page Loading takes too much time for wait so we will wait for the DOMContentLoaded event with page load strategy. This page load strategy is 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