我正在测试客户网站的数据流。与我要使用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")));