#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:
Возможно, страница с результатами поиска еще не загружена — попробуйте подождать несколько секунд, прежде чем запускать утверждение.