WebDriver, Selenium2 — сбой простого теста

#webdriver #selenium-webdriver

#webdriver #selenium-webdriver

Вопрос:

Я пробую этот тест:

 @Test
public void theUserShouldBeAbleToTypeInQueryTerms() {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    WebElement queryField = driver.findElement(By.name("q"));
    queryField.sendKeys("cats");
    queryField.submit();
    assertThat(driver.getTitle(), containsString("cats"));
}
  

но получил ошибку:

Ожидаемый сбой: получена строка, содержащая «cats»: «Google»

Как я могу изменить тест, чтобы он был УСПЕШНЫМ?

Ответ №1:

Вы должны использовать класс WebDriverWait. Он будет ждать, пока заголовок не будет равен «cats» или тайм-ауту. Вот пример того, как это работает (но вам нужно настроить код для вашего случая):

     public static void waitForTitle(final PageTitle title, WebDriver driver) {
    new WebDriverWait(driver, TestDriver.WAIT_TIMEOUT).until(new Function<WebDriver, WebElement>() {

        public WebElement apply(WebDriver driver) {
            for (WebElement we : PageHelper.findElements(WebElementLocator.pageHeader, driver)) {
                if (we.getText().equals(title.getValue())) {
                    return we;
                }
            }
            throw new NoSuchElementException("Title not found: ""   title.getValue()   """);
        }
    });
}
  

Ответ №2:

Возможно, страница с результатами поиска еще не загружена — попробуйте подождать несколько секунд, прежде чем запускать утверждение.