java Selenium 中的 pageLoadTimeout 不起作用

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45591282/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 08:46:57  来源:igfitidea点击:

pageLoadTimeout in Selenium not working

javaseleniumselenium-webdriverwebdriverpageloadtimeout

提问by Bharat Nanwani

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?

我在 Java 中使用 selenium 使用以下代码。我正在添加 4 秒的 pageLoadTimeout,但是,驱动程序继续等待,直到加载完整页面。有什么帮助吗?

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

采纳答案by DebanjanB

The solution to your pageLoadTimeoutissue would be to bump up your Seleniumversion to v3.5.0. Here is effective code block and the resulted org.openqa.selenium.TimeoutException: Timeout loading page after 2000msof your own code in minimal lines:

您的pageLoadTimeout问题的解决方案是将您的Selenium版本提升到v3.5.0。这是有效的代码块和org.openqa.selenium.TimeoutException: Timeout loading page after 2000ms您自己的代码以最少的行生成的结果:

  • 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)
    
  • 代码块:

    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)
    


Catching the WebDriverException

捕获 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
    
  • 代码块:

    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();
        }
    }
    
  • 控制台输出:

    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
    

回答by Gaurang Shah

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.

如果您指定了时间,而 selenium 无法在指定时间加载站点,则会抛出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");
    }

if it's not throwing TimeoutException, either website has done loading within specified time or something is wrong with Selenium API.

如果它没有 throwing TimeoutException,则要么网站已在指定时间内完成加载,要么 Selenium API 出现问题。

回答by Shubham Jain

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.

WebDriver.Timeouts -> pageLoadTimeout(long time, java.util.concurrent.TimeUnit unit) 设置在抛出错误之前等待页面加载完成的时间。

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.

设置在抛出错误之前等待页面加载完成的时间。如果超时为负,则页面加载可能是不确定的。参数: time - 超时值。unit - 时间单位。返回: 超时接口。

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

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