我正在测试客户网站的数据流。与我要使用Selenium命令测试的每个页面的数据元素相比,它的广告加载时间要长得多。

我无法控制广告,也无法使其静音。

我想在完整页面加载之前通过单击浏览每个页面。我知道这是可能的,因为我可以使用鼠标手动进行操作。但是,尽管我进行了尝试,但顽固的chromeDriver在加载整个页面之前不会开始自动化。

我正在使用C#.Net 4.6.1,chrome32_55.0.2883.75和Selenium版本3.0.1.0。

此外,我正在使用推荐的Selenium页面对象模型。我实现了WaitForLoad()这样的:

    public override void WaitForLoad()
    {
        _isLoaded = Wait.Until(d =>
        {
            lock (d)
            {
                SwitchToSelf();

                return PageRegex.IsMatch(Session.Driver.PageSource);
            }
        });
    }


上面的PageRegex将起作用,但是只有在加载整个页面之后才能起作用。令人沮丧的是,因为我可以从视觉上看到PageRegex设计用来解析的文本字符串在屏幕上。这使我相信,也许在我配置ChromeDriver时,还有其他设置可以使我在完全加载Session.Driver.PageSource之前对其进行解析。

这就是我实例化ChromeDriver的方式:

            var options = new ChromeOptions();

            options.AddArguments("test-type");


            options.AddArgument("incognito"); // works
            options.AddArgument("--disable-bundled-ppapi-flash"); // works! this turns off shockwave
            options.AddArgument("--disable-extensions"); // works
            options.AddArguments("--start-fullscreen");

            string workFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) +
                                                 "\\SHARED";

            options.BinaryLocation = workFolder + @"\Chrome32\chrome32_55.0.2883.75\chrome.exe";
            var driver = new ChromeDriver(options);
            driver.Manage().Cookies.DeleteAllCookies();
            return driver;

最佳答案

要在页面加载完成之前与页面进行交互,可以降低超时并捕获异常:

IWebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromMilliseconds(500));

try {
    driver.Navigate().GoToUrl("http://www.deelay.me/5000/http://www.deelay.me/");
} catch (OpenQA.Selenium.WebDriverTimeoutException) { }

// waits for an element
var body = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("body")));


或者,您可以通过将页面加载状态设置为none来禁用等待:

var options = new ChromeOptions();
options.AddAdditionalCapability("pageLoadStrategy", "none", true);

IWebDriver driver = new ChromeDriver(options);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

driver.Navigate().GoToUrl("http://www.deelay.me/5000/http://www.deelay.me/");

// waits for an element
var body = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("body")));

09-20 23:39