java selenium selenium-webdriver webdriver pageloadtimeout

java - pageLoadTimeout en Selenium no funciona



selenium-webdriver webdriver (3)

Estoy usando el siguiente código con selenio en Java. Estoy agregando pageLoadTimeout de 4 segundos, sin embargo, el controlador continúa esperando hasta que se cargue la página completa. ¿Alguna ayuda?

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


La solución a su problema pageLoadTimeout sería aumentar su versión de Selenium a v3.5.0 . Aquí hay un bloque de código efectivo y el resultado org.openqa.selenium.TimeoutException: Timeout loading page after 2000ms de su propio código en líneas mínimas:

  • Bloque de código:

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

  • Salida de consola:

    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)

Capturando la WebDriverException

  • Bloque de código:

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

  • Salida de consola:

    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 (tiempo largo, unidad java.util.concurrent.TimeUnit) Establece el tiempo de espera para que se complete una carga de página antes de generar un error.

pageLoadTimeout

WebDriver.Timeouts pageLoadTimeout(long time,java.util.concurrent.TimeUnit unit)

Establece el tiempo de espera para que se complete una carga de página antes de generar un error. Si el tiempo de espera es negativo, las cargas de página pueden ser indefinidas. Parámetros: tiempo: el valor del tiempo de espera. unidad: la unidad de tiempo. Devoluciones: una interfaz de tiempos de espera.

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html


si especifica la hora y el selenio no puede cargar el sitio, la hora especificada arrojará TimedoutException . Deberías manejar eso en tu código.

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

si no está lanzando TimeoutException , o el sitio web ha realizado la carga dentro del tiempo especificado o algo está mal con Selenium API.