Selenium ChromeDriver C#如何在加载前导航页面?

时间:2017-04-06 03:17:14

标签: c# google-chrome selenium

我正在测试客户网站的数据流。它的广告加载时间比我希望用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;

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

您是否尝试过使用ExpectedConditions类的ElementToBeClickable或VisibilityOfElementLocated方法。我认为它应该适用于你提到的场景。

[0]

答案 2 :(得分:0)

  

我想在完成之前通过点击导航每个页面   页面加载

在页面仍在加载时,您是否理解您想要点击某些链接? 如果你知道要点击哪些元素,也许你可以像这个问题一样How to click on an element before the page is fully loaded i'm stuck, it takes too much time until loading completed