pageLoadTimeout在Selenium中不起作用-Java

时间:2018-10-09 17:56:41

标签: selenium webdriver selenium-firefoxdriver pageloadtimeout

我正在linux主机上测试一个网站。我正在访问的页面是无限加载的,所以我尝试为selenium设置pageLoadTimeout。 Firefox已正确触发,但URL栏上的URL无法加载/导航/添加。只是空白的Firefox窗口。我也没有看到任何错误。

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
driver.get("http://www.example.com");

但是,如果我删除driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);代码,效果很好

硒版本:3.14.0;

gecko驱动程序:18-Linux(已通过gecko 16,17测试,同样存在问题)

浏览器:firefox-52

os / platform:Linux

如果出现此类问题,如何确保5分钟后我的驱动程序自行退出。主机将仅支持firefox 52。

我检查了此link,但没有解决我的问题。

谢谢 Jk

2 个答案:

答案 0 :(得分:1)

您可以为浏览器设置页面加载策略,这将使页面不等待其他Selenium命令执行的整个页面加载。以下是Java中的示例代码片段。支持三个值:

普通

这种状态导致Selenium等待整个页面加载(已下载并解析HTML内容和子资源)。

渴望

这种状态导致Selenium等待DOMContentLoaded事件(仅下载和解析html内容)。

此策略使Selenium在完全接收到初始页面内容(已下载html内容)后立即返回。

默认情况下,当Selenium加载页面时,它遵循 normal pageLoadStrategy。

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("pageLoadStrategy", "eager");
FirefoxOptions opt = new FirefoxOptions();
opt.merge(caps);
WebDriver driver = new FirefoxDriver(opt);
driver.get("https://www.google.com/");

如果您只对页面的HTML感兴趣,最好使用“渴望”策略。

答案 1 :(得分:1)

您没有提到要尝试访问的 url ,但是 Selenium pageLoadTimeout 可以与 Selenium v​​3一起正常使用.14.0 GeckoDriver v0.23.0 Firefox Quantum v62.0.3 组合。我可以使用以下示例在控制台上看到预期的输出,该示例显示 TimeoutException发生。每当触发 pageLoadTimeout 时退出程序

  • 代码块:

    import java.util.concurrent.TimeUnit;
    
    import org.openqa.selenium.TimeoutException;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    public class A_Firefox_Test 
    {
        public static void main(String[] args) 
        {
            System.setProperty("god.bless.us", "C:/Utility/BrowserDrivers/geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            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 (TimeoutException e) {
                System.out.println("TimeoutException occurred. Quiting the program.");
            }
            driver.quit();
        }
    }
    
  • 控制台输出:

    1539157195615   Marionette  INFO    Listening on port 1920
    Oct 10, 2018 1:09:56 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    Oct 10, 2018 1:10:00 PM org.openqa.selenium.remote.ErrorCodes toStatus
    INFO: HTTP Status: '500' -> incorrect JSON status mapping for 'timeout' (408 expected)
    TimeoutException occurred. Quiting the program.
    
  • 您可以在pageLoadTimeout in Selenium not working

  • 中找到详细的堆栈跟踪
  • 您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0?
  • 中找到用于pageLoadTimeout Pythonic 方法