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

Фотография

Вызвать ошибку от 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
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 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, Java, TestNG

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

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