等到方法在Selenium中返回

时间:2013-12-19 07:42:04

标签: java selenium

我是Selenium的新手,我有这样的方法

public  Test login(String username,String password)
{
    accountName.sendKeys(username);
    passwordField.sendKeys(password);

    signInButton.click();
    return PageFactory.initElements(driver,Test.class);
}

登录可能需要一些时间才能完成。我希望我可以等到login方法在其他方法调用之前返回。硒有没有办法做到这一点?

1 个答案:

答案 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);