I am using below code using selenium in Java. I am adding pageLoadTimeout of 4 seconds, however, the driver continues to wait till the complete page is loaded. Any help?
System.setProperty("webdriver.gecko.driver", System.getProperty("user.home") + "\\Desktop\\geckodriver.exe");
FirefoxBinary b = new FirefoxBinary(new File(System.getProperty("user.home") + "\\desktop\\Mozilla Firefox\\firefox.exe"));
FirefoxOptions options = new FirefoxOptions().setBinary(b);
driver = new FirefoxDriver(options);
//driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);
driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl");
List<WebElement> facilitySectionList = driver.findElements(By.className("facilitiesChecklistSection"));
The solution to your pageLoadTimeout issue would be to bump up your Selenium version to v3.5.0. Here is effective code block and the resulted org.openqa.selenium.TimeoutException: Timeout loading page after 2000ms of your own code in minimal lines:
Code block:
public class Q45591282_pageloadtimeout { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); WebDriver driver=new FirefoxDriver(); driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS); driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl"); } }Console Output:
1502530864350 geckodriver INFO geckodriver 0.18.0 1502530864365 geckodriver INFO Listening on 127.0.0.1:29688 1502530865042 geckodriver::marionette INFO Starting browser C:\Program Files\Mozilla Firefox\firefox.exe with args ["-marionette"] 1502530903170 Marionette INFO Listening on port 1900 Aug 12, 2017 3:11:44 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Exception in thread "main" org.openqa.selenium.TimeoutException: Timeout loading page after 2000ms Build info: version: '3.5.0', revision: '8def36e068', time: '2017-08-10T23:00:22.093Z' System info: host: 'ATECHM-03', ip: '192.168.1.48', os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.8.0_77' Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{moz:profile=C:\Users\ATECHM~1\AppData\Local\Temp\rust_mozprofile.LSsvaNqlDbxE, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=6.2, moz:processID=3652.0, browserName=firefox, javascriptEnabled=true, platformName=windows_nt}] Session ID: 8b841376-00fd-4359-8cae-a68912b23706 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:185) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:120) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641) at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:368) at demo.Q45591282_pageloadtimeout.main(Q45591282_pageloadtimeout.java:20)
Catching the WebDriverException
Code Block:
public class pageLoadTimeout { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS); try{ driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl"); }catch(WebDriverException e){ System.out.println("WebDriverException occured"); } driver.quit(); } }Console Output:
Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Jul 17, 2019 8:53:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C [1563377008.449][SEVERE]: Timed out receiving message from renderer: 1.999 [1563377008.450][SEVERE]: Timed out receiving message from renderer: -0.001 [1563377008.461][SEVERE]: Timed out receiving message from renderer: -0.012 [1563377010.466][SEVERE]: Timed out receiving message from renderer: 1.998 [1563377010.467][SEVERE]: Timed out receiving message from renderer: -0.001 [1563377010.476][SEVERE]: Timed out receiving message from renderer: -0.010 WebDriverException occured
WebDriver.Timeouts -> pageLoadTimeout(long time, java.util.concurrent.TimeUnit unit) Sets the amount of time to wait for a page load to complete before throwing an error.
pageLoadTimeout
WebDriver.Timeouts pageLoadTimeout(long time,java.util.concurrent.TimeUnit unit)
Sets the amount of time to wait for a page load to complete before throwing an error. If the timeout is negative, page loads can be indefinite. Parameters: time - The timeout value. unit - The unit of time. Returns: A Timeouts interface.
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html
if you specify the time, and selenium is not able to load the site is specified time, it will throw TimedoutException. You should handle that in your code.
driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);
long startTime = System.currentTimeMillis();
try{
driver.get("https://yahoo.com");
}catch (TimeoutException te){
long estimatedTime = System.currentTimeMillis() - startTime;
System.out.println("it took "+estimatedTime+" Time");
}
if it's not throwing TimeoutException, either website has done loading within specified time or something is wrong with Selenium API.
来源:https://stackoverflow.com/questions/45591282/pageloadtimeout-in-selenium-not-working