我是Selenium的新手,我有这样的方法
public Test login(String username,String password)
{
accountName.sendKeys(username);
passwordField.sendKeys(password);
signInButton.click();
return PageFactory.initElements(driver,Test.class);
}
登录可能需要一些时间才能完成。我希望我可以等到login
方法在其他方法调用之前返回。硒有没有办法做到这一点?
答案 0 :(得分:1)
您有几个选项可以解决此问题。我建议你添加一个流利的等待:
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(1, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
这将等待一个元素出现,在此示例中将是仅在第二页上找到的元素。如果在超时期限之后未找到则会抛出错误。
另一种选择是增加webdriver隐式等待的时间,这样它总是可以等待更长的时间,例如:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);