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

Другие вопросы по тегам