Chrome驱动程序的页面加载策略(更新至Selenium v​​3.12.0)

Pan*_*Boy 10 selenium webdriver selenium-chromedriver selenium-webdriver pageloadstrategy

我正在使用Chrome浏览器测试WebApp.

有时页面会在很长时间后加载.我需要停止下载或限制下载时间.

在FireFox我知道PAGE_LOAD_STRATEGY = "eager".

铬有类似之处吗?

PS:driver.manage().timeouts().pageLoadTimeout()有效,但之后对Webdriver的任何处理都会引发TimeOutException.我需要在停止启动后获取页面的当前URL.

Deb*_*anB 16

从Webdriver规范:

对于导致加载新文档的命令,命令返回的点由会话的页面加载策略确定.

eager花费太多时间而你需要停止下载额外的子资源(图像,css,js等)时,你可以Page Loading通过改变 它pageLoadStrategy.

在撰写本文时,webdriver支持以下值:

  1. pageLoadStrategy

    这种状态导致Selenium等待整页加载(html内容和下载和解析的子资源).

  2. normal

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

  3. eager

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

默认情况下,在none加载页面时,它会跟随.Selenium normal


以下是pageLoadStrategy通过DesiredCapabilities类和ChromeOptions类实例配置的代码块,如下所示:

  • 使用DesiredCapabilities类:

    package demo; //replace by your own package name
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.remote.DesiredCapabilities;
    
    public class A_Chrome_DCap_Options {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            DesiredCapabilities dcap = new DesiredCapabilities();
            dcap.setCapability("pageLoadStrategy", "normal");
            ChromeOptions opt = new ChromeOptions();
            opt.merge(dcap);
            WebDriver driver = new ChromeDriver(opt);
            driver.get("https://www.google.com/");
            System.out.println(driver.getTitle());
            driver.quit();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用ChromeOptions类:

    package demo; //replace by your own package name
    
    import org.openqa.selenium.PageLoadStrategy;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    
    public class A_Chrome_Options_test {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions opt = new ChromeOptions();
            opt.setPageLoadStrategy(PageLoadStrategy.NORMAL);
            WebDriver driver = new ChromeDriver(opt);
            driver.get("https://www.google.com/");
            System.out.println(driver.getTitle());
            driver.quit();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

:pageLoadStrategy()pageLoadStrategy,normal并且eager是按要求webdriver的W3C编辑草稿,但none作为价值pageLoadStrategy仍然是一个WIP(工作正在进行中)ChromeDriver实施.您可以在Python中的Chromedriver Selenium的"Eager"页面加载策略解决方法中找到详细的讨论


参考文献:

  • @DebanjanB 您的回答没有解释“pageLoadStrategy”中的变化如何影响行为,因此后续问题超出预期,不回答它只是很粗鲁。谢谢 (2认同)