Обновлен веб-элемент тестирования веб-драйвера selenium

Как бы вы проверили, обновлен ли конкретный WebElement?

У меня есть тест, который выполняет сохранение формы, а затем пользовательский интерфейс возвращает сообщение об успехе / ошибке.

Я делаю серию сохранений, и мне нужно проверить, соответствует ли сообщение ожидаемому.

Selenium работает так быстро, что браузер не успевает его догнать.

Это код, который у меня есть для проверки сообщения об ошибке (также есть эквивалентная функция сообщения об успешном завершении)

    public void assertErrorMessage(String errorMsg) {

    // set the wait time a bit so the page can load.
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    List<WebElement> results = driver.findElements(By.xpath("//div[@id='lift__noticesContainer__']/descendant::*"));
    boolean success = false;
    String message = "";
    for (WebElement result : results) {

        String id = result.getAttribute("id");
        if (id.contains("___error")) {
            success = true;
        }
        if (result.getTagName().equals("li")) {
            message += result.getText().trim();
        }
    }
    Assert.assertTrue(success, "No error message generated");
    Assert.assertTrue(message.equals(errorMsg), "Expecting message: \"" + errorMsg + "\" but got \"" + message + "\"");

}

По мере написания он ищет наличие определенного <div> и проверяет, содержит ли он определенные атрибуты. Если это так, получите сообщение.

Дело в том, что это всегда будет правдой, и, следовательно, мои тесты терпят неудачу, поскольку сообщение отличается от предыдущего, но пользовательский интерфейс не догнал селен.

Мое решение пока заставить Thread.sleep (2000) просто немного приостановиться, чтобы пользовательский интерфейс догнал. Я знаю, что использование Thread.sleep () не одобряется.

то есть (псевдокод)

page.setField("value");
page.save();
Thread.sleep(2000);
page.assertErrorMessage("Error message");

Есть ли способ проверить, обновлен ли WebElement? Если это так, я мог бы использовать Selenium waits, чтобы проверить это.

Или, возможно, у кого-то есть предложение, как это сделать?

Заранее спасибо.


person pipplupp    schedule 20.07.2012    source источник


Ответы (1)


Если отображаемый результат продолжает появляться каждый раз, когда вы выполняете page.save ().

Лучший способ убедиться, что ваш код ожидает, пока браузер обновит сообщение, - это использовать WebDriverWait.

Простой пример:

new WebDriverWait(driver, 10).until(ExpectedConditions.textToBePresentInElement(By.xpath("xpath"), "message"));

Вы можете проверить, есть ли в этом конкретном элементе сообщение, которое вы ищете. Если это сообщение отсутствует даже через 10 секунд, будет выброшено исключение TimedOutException.

Вы можете ознакомиться с другими вариантами ExpectedConditions в зависимости от ситуации. Надеюсь, это тебе поможет.

person Hari Reddy    schedule 20.07.2012
comment
@ user1410479 Я думаю, что это правильный способ сделать это - просто попробуйте дождаться появления нужного сообщения. Это хорошо работает, если вы утверждаете ожидаемое сообщение. Если вы используете это для ожидания сообщений, которые не должны появляться, это, очевидно, заставит ваши тесты работать долго (10 секунд для каждого такого сообщения). - person Petr Janeček; 20.07.2012
comment
спасибо за вашу помощь в этом. Ваше предложение сработало! Я изменил описанный выше метод до 2 строк! Я не знаю, почему мне не пришло в голову ждать сообщения. Использование неявных и явных ожиданий все еще сбивает меня с толку. - person pipplupp; 25.07.2012