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