Печать значимого сообщения о сбое теста с использованием jUnit, Selenium Webdriver и продолжение скрипта

Простите вопрос начинающего. У меня есть скрипт Webdriver (Java, JUnit4), который тестирует ряд очень похожих веб-страниц на наличие общих элементов.

На некоторых веб-страницах есть даты, на некоторых нет. Для тех, кто этого не делает, я хочу, чтобы результат теста напечатал «Текущая дата не отображается», а затем продолжил выполнение оставшейся части @Test.

Фрагмент кода, который я использую:

@Test
public void checkIfTodaysDateDisplayed(){

    WebElement currentDate = driver.findElement(By.cssSelector(".currentDate"));
    assertEquals("The current date is not displayed", currentDate.isDisplayed());

}

В настоящее время на тех страницах, которые не содержат дату, выдается исключение NoSuchElementException, и результат теста Jenkins просто показывает: «Невозможно найти элемент: {"метод":"селектор css","селектор":".currentDate"}"

Чего я хочу добиться, так это: а) напечатать значимое сообщение б) не останавливать тест, так как мне нужно запустить 5 или 6 других @Test для каждой страницы.

Какое лучшее/оптимальное решение исправить утверждение и справиться с этим? Блок Try/Catch?

РЕДАКТИРОВАТЬ: обновленный код:

WebElement currentDate = null;
    try {
        currentDate = driver.findElement(By.cssSelector(".currentDate"));
    } catch (NoSuchElementException e) {
        Assert.fail("The current date is not displayed! " + e.getMessage());
    }
    Assert.assertNotNull(currentDate);
    Assert.assertEquals("The current date is displayed", currentDate.isDisplayed());

Если на странице ДЕЙСТВИТЕЛЬНО есть дата, консоль печатает:

java.lang.AssertionError: 
Expected :The current date is displayed
Actual   :true

Если на странице НЕТ даты, консоль выводит:

org.openqa.selenium.NoSuchElementException: Unable to locate element: 
{"method":"css  selector","selector":".currentDate"}

person Steerpike    schedule 14.01.2014    source источник


Ответы (2)


К А)

Да, одно из решений — поместить первую строку в блок try-catch. Обязательно поймайте только исключение, которое вы ожидаете, и никакое другое, так как тогда ваш тест будет содержать дыры.

Ваш код может выглядеть так:

@Test
public void checkIfTodaysDateDisplayed(){

    WebElement currentDate = null;
    try {
        currentDate = driver.findElement(By.cssSelector(".currentDate"));
    }
    catch (NoSuchElementException e) {
        Assert.fail("Web page is not properly set up! " + e.getMessage());
    }
    Assert.assertNotNull(currentDate);
    Assert.assertEquals("The current date is not displayed", currentDate.isDisplayed());
}

Вы можете добавить дополнительную информацию к своим утверждениям, например, трассировку стека исключений или что-то еще, что необходимо для отладки.

К Б)

Напишите отдельные тесты для каждого случая, который вы хотите протестировать. Если вы поместите все в один монолитный тест, будет сложнее отследить точную позицию, в которой ваш тест не пройден. Напишите тесты, которые не зависят друг от друга.

person LastFreeNickname    schedule 14.01.2014
comment
Спасибо за ответ. Я попробовал предложенный блок try/catch, но все равно получаю исключение NoSuchElementException без сообщения о том, что веб-страница не настроена. Не уверен, почему. Я согласен в отношении б) - единичные тесты - это путь - person Steerpike; 14.01.2014
comment
Попробуйте найти точную строку, которая создает исключение NoSuchElementException. Правильно ли настроен ваш блок try-catch? Если это так, используйте отладчик для пошагового выполнения кода, пока он не выдаст исключение. - person LastFreeNickname; 14.01.2014
comment
Благодарю. Я установил try/catch в соответствии с вашим предложением, и исключение выдается в строке currentDate = driver.find.......... - person Steerpike; 14.01.2014
comment
Хорошо, мило. Если это помогло, не стесняйтесь отмечать мой пост как решение. - person LastFreeNickname; 14.01.2014
comment
Извините, я хотел сказать, что исключение по-прежнему генерируется и не обрабатывается, и я не получаю красивого, осмысленного сообщения о том, что страница неверна. Я понимаю, что это может быть болезненно, но, как уже упоминалось, я все еще учусь - я действительно ценю помощь. - person Steerpike; 14.01.2014
comment
Хорошо, нет проблем. Можете ли вы выполнить код, который я разместил, и сообщить результаты? - person LastFreeNickname; 14.01.2014
comment
Спасибо за ваши старания! Я обновил исходный пост, чтобы показать, что происходит в настоящее время - person Steerpike; 15.01.2014

Похоже, что ваш Assert на currentDate.IsDisplayed() сравнивает логическое значение (true) со строкой.

person Kimberley Ross    schedule 23.04.2014