Перейти к содержимому

Аудит и оптимизация QA-процессов
онлайн, начало 24 декабря
Автоматизация функционального тестирования
онлайн, начало 27 ноября
Логи как инструмент тестировщика
онлайн, начало 30 ноября
Тестирование REST API
онлайн, начало 30 ноября
Фотография

Вызвать ошибку от testng (Selenium, Java)

Selenium Java TestNG

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 PhilipK

PhilipK

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 08 августа 2016 - 08:00

Есть проверка, оправляем пустою форму и проверяем наличие текста с ошибкой, есле текста нет выводи сообщение. Вопрос в том как заставить TestNG выводить ошибку, если выполняеться условие из Else? 

@Test
	public void Send_empty_form(){
		System.out.println("Отправляем пустую форму.....");
		driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
		if(driver.findElement(By.xpath("//html")).getText().contains("Имя должно содержать от 1 до 32 символов!")) System.out.println("///Текст ошибки имени найден");
		else System.out.println("///Текст ошибки имени НЕ найден");

Каким бы не был результат теста он скажет что тест пройден, и это логично но как заставить его сказать что тест провален? Заранее спасибо!

1.png


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 843 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 08 августа 2016 - 08:33

Читай про Assert, что еще можно добавить

Там есть всякие assertTrue, assertEquals


  • 0

#3 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 08 августа 2016 - 10:02

Вопрос в том как заставить TestNG выводить ошибку, если выполняеться условие из Else?

Assert.fail("Текст ошибки имени НЕ найден");

  • 0

#4 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 08 августа 2016 - 12:29

Зачем "ручные" фейлы делать, если TestNG и сам справится?

Assert.assertTrue(driver.findElement(By.xpath("//html")).getText().contains("Имя должно содержать от 1 до 32 символов!"), "///Текст ошибки имени НЕ найден");
System.out.println("///Текст ошибки имени найден");

Прим.: сам ассерт при наличии ошибки ничего не выдаст, но дойдет до строки вывода, что "текст ошибки имени" найден. Если текста ошибки имени нет - выдаст соответствующее сообщение и упадет с эксепшеном, тест зафейлится, до строки о том, что все ок - не дойдет.


  • 0

#5 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 08 августа 2016 - 12:48


Прим.: сам ассерт при наличии ошибки ничего не выдаст, но дойдет до строки вывода, что "текст ошибки имени" найден. Если текста ошибки имени нет - выдаст соответствующее сообщение и упадет с эксепшеном, тест зафейлится, до строки о том, что все ок - не дойдет.

вот именно, что выдаст что ожидали тру но получили фалс. и все ... По моему не очень информативно...

А если мы этот текст хотим вывести в Allure отчет, например? Который читает только стектрейсы ошибок


  • 0

#6 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 08 августа 2016 - 12:57

ребят, ну что вы как маленькие. Читаем документацию 
 

assertTrue(boolean condition, java.lang.String message)

можешь в ассерт вставить сообщение которое будет вываливаться при фейле. И в это сообщение можешь любую информацию о переменных вывести. Элементарные вещи спрашиваете.


  • 1

#7 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 08 августа 2016 - 13:41

вот именно, что выдаст что ожидали тру но получили фалс. и все ... По моему не очень информативно...

А если мы этот текст хотим вывести в Allure отчет, например? Который читает только стектрейсы ошибок

+

ребят, ну что вы как маленькие. Читаем документацию 
 

assertTrue(boolean condition, java.lang.String message)

можешь в ассерт вставить сообщение которое будет вываливаться при фейле. И в это сообщение можешь любую информацию о переменных вывести. Элементарные вещи спрашиваете.

 

Lzk

Ваше "и все" говорит о том, что вы не знакомы с assertTrue. Как уже написал elvis, текст который вы указываете - выводится в том случае, если получен не тот результат, который должен был бы быть. Больше того, этот ассерт зафейлит тест (что и требовалось автору) и в причине фейла - выдаст помимо эксепшена - указанное сообщение.

 

Собственно, именно это и делает мой пример.

Выдает вполне конкретный и понятный пользователю текст, в случае, если вместо true (т.е. найден текст ошибки имени) получен false (т.е. ошибка имени должна быть, но её не нашли).

НИЧЕГО не выдает - в случае, если текст ошибки найден => проверка успешно прошла.

И уже вторая строчка - добавляет понятный пользователю текст об успешности проверки (на мой взгляд это вообще лишнее и лог захламит, но тут уже не мне решать, как ТСу удобнее логи анализировать).

Куда уж тут ещё информативнее можно сделать - даже не представляю. Разве что искомый текст запихнуть в переменную, по ней искать и её же выводить в логе а-ля "вот такую вот ошибку не нашли".

 

Попробуйте сами ради интереса:

Assert.assertTrue(true, "Это сообщение выведено НЕ будет, т.к. ожидаем true и получили true. Тест ok");
Assert.assertTrue(false, "Это сообщение выведено будет, т.к. ожидаем true, а получили false. Тест fail");

  • 0

#8 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 08 августа 2016 - 13:51

Татьяна, я знаком с assertTrue, поверьте на слово. Мне не очень понятно ,почему в каждом посте вы усердно настаиваите на своих вариантах, как на эталоне написания тестов. Это всего лишь Ваше мнение и все ...

Хотя вариантов написания множество и каждый пишет, как ему нравится и под свои какие то здачи.Захотел человек так зафейлить тест, ну и что такого, если такая возможность есть в TestNG ?

По поводу варианта elvis

по мне

 

ошибка expected [true] but found [false]

выглядит менее читаемо в отчете, чем

ошибка


  • 0

#9 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 08 августа 2016 - 14:26

По поводу варианта elvis

по мне

 

ошибка expected [true] but found [false]

выглядит менее читаемо в отчете, чем

ошибка

не совсем понял о чём вы? Выглядеть оно будет не так.


  • 1

#10 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 08 августа 2016 - 14:33

не совсем понял о чём вы? Выглядеть оно будет не так.

 

Assert.assertTrue(false, "ошибка");	
Assert.fail("ошибка");

  • 0

#11 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 09 августа 2016 - 06:42

Татьяна, я знаком с assertTrue, поверьте на слово. Мне не очень понятно ,почему в каждом посте вы усердно настаиваите на своих вариантах, как на эталоне написания тестов. Это всего лишь Ваше мнение и все ...

Хотя вариантов написания множество и каждый пишет, как ему нравится и под свои какие то здачи.Захотел человек так зафейлить тест, ну и что такого, если такая возможность есть в TestNG ?

По поводу варианта elvis

по мне

 

ошибка expected [true] but found [false]

выглядит менее читаемо в отчете, чем

ошибка

Причем тут "эталон написания тестов"? Я нигде не настаиваю, что мой вариант единственно верный. Даже наоборот - не раз писала, что выбранный мной путь развития скриптов не идеален. Вы что-то путаете.

 

Assert.assertTrue(false, "ошибка"); 

     java.lang.AssertionError: Не найден текст ошибки имени 

     Expected :true
     Actual   :false

Assert.fail("ошибка");

     java.lang.AssertionError: Не найден текст ошибки имени

 

 

При этом в коде:

 

if (<все хорошо>) {

   <что-то делаем>;

} else {

    Assert.fail("ошибка");

}

 

Или

 

Assert.assertTrue(<все хорошо>, "ошибка");

<что-то делаем>;

 

Сложный выбор конечно. 

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

 

п.с.: если бы Вы не стали настаивать, что "выдаст что ожидали тру но получили фалс. и все" (хотя это абсолютно не так) - дискуссия дальше не пошла бы, каждый остался бы при своем варианте. Но Вы сами почему то решили доказать всем вокруг, что Ваш вариант единственно верный, используя в качестве аргумента - неверную информацию.

 

п.п.с.: "Захотел человек так зафейлить тест, ну и что такого, если такая возможность есть в TestNG ?" - вообще не понятный мне вопрос. Вариант, который предложили я и elvis - также использует стандартные возможности TestNG и также фейлит тест, как и нужно было автору темы.


  • 2

#12 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 09 августа 2016 - 07:53

ок, Татьяна. Все хорошо , успокойтесь))


  • 0

#13 DmitriyQA

DmitriyQA

    Постоянный участник

  • Members
  • PipPipPip
  • 183 сообщений
  • ФИО:Коваленко Дмитрий Владимирович
  • Город:Tel Aviv

Отправлено 10 августа 2016 - 15:22

Горячее обсуждение, вставлю свои 5 коп. 

 

По конвенции автоматизации в тестах нельзя пользоваться логикой особенно if. Если уже есть такая необзодимость (в этом случаее ее нет), то оборачивайте такую логику в драйверы или executorы.

Поддержу Татьяну в том что использовать if вместо assrt это невежество. Как бы ваш код пишите как вам хочется, но иногда стоит прислушаться к тому что вам советуют.


  • 3

Senior QA/ Wix.com / qaacademy.net



Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн




Темы с аналогичным тегами Selenium, Java, TestNG

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале