pageLoadTimeout в Selenium не работает
Я использую код ниже, используя селен в Java. Я добавляю pageLoadTimeout на 4 секунды, однако драйвер продолжает ждать, пока загрузится полная страница. Любая помощь?
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"));
3 ответа
Решение для вашего pageLoadTimeout
вопрос заключается в том, чтобы поднять ваш Selenium
версия до v3.5.0. Вот эффективный блок кода и приведенный org.openqa.selenium.TimeoutException: Timeout loading page after 2000ms
вашего собственного кода в минимальных строках:
Блок кода:
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");
}
}
Консольный вывод:
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)
Если вы укажете время, а селен не сможет загрузить указанный вами сайт, то выкинет TimedoutException
, Вы должны справиться с этим в своем коде.
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");
}
если не бросать TimeoutException
либо веб-сайт загрузился в течение указанного времени, либо что-то не так с Selenium API.
WebDriver.Timeouts -> pageLoadTimeout(long time, java.util.concurrent.TimeUnit unit) Устанавливает время ожидания завершения загрузки страницы перед выдачей ошибки.
pageLoadTimeout
WebDriver.Timeouts pageLoadTimeout(long time,java.util.concurrent.TimeUnit unit)
Задает время ожидания завершения загрузки страницы, прежде чем выдать ошибку. Если время ожидания отрицательное, загрузка страниц может быть неопределенной. Параметры: время - значение времени ожидания. единица - единица времени. Возвращает: интерфейс тайм-аутов.
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html