其他人有上述问题吗? 我似乎无法让geckodriver隐式或明确地等待。它只在我使用Thread.sleep()
时有效这是我的Explicit方法,它在我的代码库中使用chromedriver工作正常:
public void waitForPageLoad(WebDriver driver) throws MyTestException {
try { new WebDriverWait(driver, page_timeout).until((ExpectedCondition<Boolean>) wd ->
((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
} catch (Exception e){logger.warning("Waiting for page load failed.");}
}
我甚至不必使用隐式调用。
这是我的gecko驱动程序初始化代码,我还初始化了一个隐式等待。
else if (config.useFirefox()) {
String geckoDriverLocation = config.getProperty("qa.webdriverpath") + "geckodriver.exe";
System.setProperty("webdriver.gecko.driver", geckoDriverLocation);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//DesiredCapabilities dc = DesiredCapabilities.firefox();
}
不使用睡眠,它甚至不等待登录元素填充。 例如:
WebElement emailText = test.getDriver().findElement(By.name("email"));
WebElement passText = test.getDriver().findElement(By.name("password"));
WebElement loginButton = test.getDriver().findElement(By.xpath("//input[@type='submit']"));
test.getLogger().info("Logging in as user " + user.contact.getName() + " (" + user.getEmail() + ")...");
emailText.clear();
emailText.click();
emailText.sendKeys(user.getEmail());
emailText.sendKeys(Keys.TAB);
passText.clear();
passText.sendKeys(user.getPassword());
passText.sendKeys(Keys.TAB);
loginButton.click();
//try{Thread.sleep(3000);}catch(Exception e){}
test.waitForPageLoad(test.getDriver());
指导赞赏。
答案 0 :(得分:1)
我遇到了与selenium 3.3.1,geckodriver 0.15.0和Firefox 52.0.2相同的问题。隐式等待无效。解决方法是继续增加睡眠但这很糟糕。我发现这个bug已经提出https://github.com/mozilla/geckodriver/issues/308
答案 1 :(得分:0)
隐式等待在geckodriver中运行正常,但是页面加载超时在geckodriver中不起作用,这是geckdriver中的一个错误并且它被引发了。所以请使用Legacy fire fox驱动程序,它的效果非常好。
页面超时不起作用意味着,单击按钮后,它不会等待页面完全加载,它会在单击后立即释放控件。
安装Fire fox 47.0.2(这是传统firefox驱动程序可以驱动的最新版本)
如果您使用selenium webdriver 3.3.0,那么geckodriver是默认的,因此对于deactive geckodriver,您只需将参数marionette设为false!
这是我在Ruby selenium绑定中使用的方式来使marionette变为false
caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)
请找到相应的Java。