2

我正在 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

操作系统/平台:Linux

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

我检查了这个链接,但没有解决我的问题。

谢谢Jk

4

2 回答 2

1

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

普通的

这种策略导致 Selenium 等待整个页面加载(下载和解析 html 内容和子资源)。

渴望的

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

没有任何

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

默认情况下,当 Selenium 加载页面时,它遵循正常的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 感兴趣,最好使用“eager”策略。

于 2018-10-10T04:22:32.520 回答
1

您没有提到您尝试访问的url ,但是Selenium的pageLoadTimeoutSelenium v​​3.14.0GeckoDriver v0.23.0Firefox 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.
    
  • 您可以在 Selenium 中的 pageLoadTimeout 中找到详细的堆栈跟踪不起作用

  • 您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0 ?pageLoadTimeout
于 2018-10-10T07:52:55.780 回答