WebDriver等待,不同的等待条件

时间:2014-03-10 02:48:36

标签: java selenium selenium-webdriver

我正在使用带有Java绑定的WebDriver。我正在使用通用方法进行元素等待。其中一个叫做waitByPageTitle。

以下是我对此方法的定义:

public void waitByPageTitle(WebDriver driver, String pageTitle) {
        WebDriverWait wait = new WebDriverWait(driver, DEFAULT_IMPLICIT_WAIT);
        try {
            wait.until(ExpectedConditions.titleContains(pageTitle));
        } catch (TimeoutException e) {
            ...
        }
    }

在我的页面对象中,当一个方法需要按页面标题等待时,我会将参数传递给此方法。但是有些情况下页面标题可能因不同的事件而有所不同。 如何更改通用的waitByPageTitle方法,使其接受多个参数,并且可以等待它们看到第一个参数的任何一个参数?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用FluentWait和Java varargs

 // This method will accept any number of titles
 public void waitUntilTextChanges(WebDriver driver, String... titles) {

         new FluentWait<WebDriver>(driver)
        .withTimeout(60, TimeUnit.SECONDS)
        .pollingEvery(10, TimeUnit.MILLISECONDS)
        .until(new Predicate<WebDriver>() {

            public boolean apply(WebDriver d) {
                boolean titleMatched = false;
                // Get current window title
                String windowTitle = driver.getTitle();
                for(String title : titles){
                   // Iterate through all input titles and compare with window title 
                   titleMatched = windowTitle.equalsIgnoreCase(title);
                   // If match found, exit 
                   if(titleMatched){
                      break;
                   }
                }    
                return titleMatched;
            }
        });
    }