无法设置 ChromeDriver 实例的页面加载



久久潜伏在这里,现在是我第一篇真正的帖子的时候了。 我目前正在为我们在 .NET 中使用 Selenium 的应用程序开发跨浏览器测试。

在 http://www.guru99.com/cross-browser-testing-using-selenium.html 之后,我实现了这个:

[SetUpFixture]
public class TestSetup()
{
public static IWebDriver driver;
...
[OneTimeSetUp]
public void GlobalSetup()
{
if(browserToTest.Equals("Firefox"))
{
driver = new FirefoxDriver();
}
else if(browserToTest.Equals("Chrome"))
{
driver = new ChromeDriver();
}
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10.00);
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10.00);
// navigate to url, login, etc. pp
}
}

在"火狐"的情况下,一切都很好。"Chrome"案例 - 与教程相反 - 给了我这个错误:

OneTimeSetUp: System.NotImplementException : 驱动程序实例必须符合 W3C 规范以支持获取超时值。

我正在使用:

  • 火狐 v54.0
  • 铬 v59.0.3071.115
  • Selenium.WebDriver v3.4.0
  • Selenium.Firefox.WebDriver v0.17.0
  • Selenium.WebDriver.ChromeDriver v2.30.0.1

我可以为 chrome 设置 ImplicitWait 和 PageLoad 吗,还是只为 Firefox 实现?

你可以试试

driver.manage().timeouts().implicitlyWait(10,timeunit.seconds)
driver.manage().timeouts().pageLoadTimeout(10,timeunit.seconds)

这是硒 3

我使用了这段代码,它在Chrome和Firefox中都对我有用。PageObject 是我的类,waitPageToLoad 是我的方法。

public class PageObject {
protected Logger log = LogManager.getLogger(this.getClass().getName());
protected WebDriver driver;
protected WebDriverWait wait;
public WebDriver getDriver() {
log.debug("obtaining the driver object for current thread");
return driver;
} 
public WebDriverWait getWait() {
log.debug("obtaining the wait object for current thread");
return wait;
}
public void initialise(Object obj) {
PageFactory.initElements(getDriver(), obj);
}
public PageObject waitPageToLoad() {
domLoaded();
jqueryLoaded();
return this;
}
public void domLoaded() {
log.debug("checking that the DOM is loaded");
final JavascriptExecutor js = (JavascriptExecutor) getDriver();
Boolean domReady = js.executeScript("return document.readyState").equals("complete");
if (!domReady) {
getWait().until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return (js.executeScript("return document.readyState").equals("complete"));
}
});
}
}
private void jqueryLoaded() {
log.debug("checking that any JQuery operations complete");
final JavascriptExecutor js = (JavascriptExecutor) getDriver();
if ((Boolean) js.executeScript("return typeof jQuery != 'undefined'")) {
boolean jqueryReady = (Boolean) js.executeScript("return jQuery.active==0");
if (!jqueryReady) {
getWait().until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return (Boolean) js.executeScript("return window.jQuery.active === 0");
}
});
}
}
}
}

最新更新