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

Фотография

Использование if-else в работе теста

java testNG if-else

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

#1 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 11:28

Добрый день. Я новичек в автоматизации, нуждаюсь в подсказке)

Написал фрейворк для тестирования сайта, использую java, testNG, selenium, PageObject

 

Возникла проблема следующая:

................................

 

TicketPage.makeRate(driver).click();
   
  if (TicketPage.errorMessageStopMarket(driver).isDisplayed()){
    HomePage.exitButton(driver).click();
     }
  else if (TicketPage.errorMessageNotMoney(driver).isDisplayed()){
   HomePage.exitButton(driver).click();
     }
  else{
   Assert.assertTrue(TicketPage.rateOkMessage(driver).isDisplayed());
   HomePage.exitButton(driver).click();
}

 

Если первых два ифа не срабатывают то не срабатывает метод HomePage.exitButton(driver).click(), выдает сообщение "Unable to locate element: {"method":"xpath","selector":"//li[@class = \"err_1031\"]/i"}" (по даному xpath находится елемент из первого ифа.). Ума не приложу почему если елемента нет, программа не переходит к следующему ифу.

 

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

 

Готов на здравую критику, буду даже благодарен!


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 08 июля 2015 - 11:40

Вам не кажется, что элемент MessageStopMarket и элемент exitButton должны быть с разными локаторами (Вы же сами написали что находится элемент MessageStopMarket.)?

Элемент может быть на странице, но не отображаться, поэтому надо проверять на существование (isExist) - но это зависит, что у вас над селениумом.


  • 0

#3 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 11:46

Вам не кажется, что элемент MessageStopMarket и элемент exitButton должны быть с разными локаторами?

Вы же сами написали что находится элемент MessageStopMarket.

Элемент может быть на странице, но не отображаться, поэтому надо проверять на существование (isExist) - но это зависит, что у вас над селениумом.

1. Эти два элемента имеют разные локаторы. Если вы судите по (driver), то как я понимаю, это аврвметр соответствующего метода, а в самом методе коректные локаторы.

2. В каком понимании что над силениумом?

3. isExist что это за метод? Как им пользоваться,....у меня доступны только isDisplayed и isEnabled


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 08 июля 2015 - 12:09

Извиняюсь, я чуток перепутал, да элемент может быть, но может быть невидимым, по этому надо проверять, что элемент не только есть, но и видимый.

Для этого надо писать свой отельный метод. Если у вас элемент не нашелся, то справедливо, исполнение теста упадёт с ошибкой, надо такую ситуацию обрабатывать.

Что значит не срабатывает if?

что значит "(по даному xpath находится елемент из первого ифа.)"? какой элемент: MessageStopMarket или exitButton?


  • 0

#5 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 12:14

Извиняюсь, я чуток перепутал, да элемент может быть, но может быть невидимым, по этому надо проверять, что элемент не только есть, но и видимый.

Для этого надо писать свой отельный метод. Если у вас элемент не нашелся, то справедливо, исполнение теста упадёт с ошибкой, надо такую ситуацию обрабатывать.

Что значит не срабатывает if?

что значит "(по даному xpath находится елемент из первого ифа.)"? какой элемент: MessageStopMarket или exitButton?

1. "Что значит не срабатывает if?" - ну в моем понимании если в ифе первое условие не удовлетворяется, то он переходит к следующему и так далее. А тут все падает. Но Ваше замечание по поводу видимости понял.

2. "что значит "(по даному xpath находится елемент из первого ифа.)"? какой элемент: MessageStopMarket или exitButton?" -  MessageStopMarket

 

 

В своем методе, как проверить видимость елемента? Какие признаки видимости элемента на странице?


  • 0

#6 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 08 июля 2015 - 12:22

1. Ещё раз, падает потому что при поиске элемента ничего не находится, и у вас ошибка.

Значит вам надо дорабатывать метод errorMessageStopMarket, чтобы при ненахождении элемента он не выдавал ошибку, а выдавал либо найденный элемент, либо пусто.

Потом, когда вы у "пусто" захотите проверить .isDisplayed() у вас опять будет ошибка. По этому, вам надо вообще этот метод (errorMessageStopMarket) изменить, чтобы он выдавал только тру или фальсе.

Если найден элемент - проверяем что он видим и возвращаем результат видимости, если не найден элемент - возвращаем фальсе.


  • 0

#7 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 12:25

isDisplayed этот метод проверяет видимость элемента....но я его юзаю, выдает ту же ошибку


  • 0

#8 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 12:34

1. Ещё раз, падает потому что при поиске элемента ничего не находится, и у вас ошибка.

Значит вам надо дорабатывать метод errorMessageStopMarket, чтобы при ненахождении элемента он не выдавал ошибку, а выдавал либо найденный элемент, либо пусто.

Потом, когда вы у "пусто" захотите проверить .isDisplayed() у вас опять будет ошибка. По этому, вам надо вообще этот метод (errorMessageStopMarket) изменить, чтобы он выдавал только тру или фальсе.

Если найден элемент - проверяем что он видим и возвращаем результат видимости, если не найден элемент - возвращаем фальсе.

но если метод будет выдавать тру или фалсе, то как тогда производить действия наж этим элементом? Не совсем понимаю как потом работать с тру и фолсе


  • 0

#9 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 08 июля 2015 - 12:37

Значит, надо писать 2 метода, один проверку, другой - получение элемента.


  • 0

#10 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 08 июля 2015 - 12:43

Значит, надо писать 2 метода, один проверку, другой - получение элемента.

попробую, спасибо. Отпишу ка кбудет результат


  • 0

#11 Igor_Khrol

Igor_Khrol

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

  • Members
  • Pip
  • 29 сообщений
  • ФИО:Хрол Игорь


Отправлено 08 июля 2015 - 13:20

Старайтесь вообще минимизировать использование if-else в тестовом коде. Тесты должны быть максимально прямолинейными и без ветвлений, тогда меньше проблем и не надо тестировать сами тесты.


  • 0
Игорь Хрол
http://www.khroliz.com

#12 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 08 июля 2015 - 14:33

у вас во всех трех ветка выполняется одно и тоже действие HomePage.exitButton(driver).click();
Это так и задумывалось?
 

Ума не приложу почему если елемента нет, программа не переходит к следующему ифу.


может потому, что у вас происходит исключение и его надо обрабатывать?
 
А что вобще должен делать этот код?

Я так понял что если на экране есть или errorMessageStopMarket или errorMessageNotMoney, то просто выходим.
Иначе проверяем что на экране обязательно должно быть rateOkMessage
 
Если это так, то согласен с  Igor_Khrol - это плохая идея так писать тесты.
Но, если очень хочется, то попробуйте сделать так
 

TicketPage.makeRate(driver).click();

boolean needOk = True;
try{  
  needOk =  not TicketPage.errorMessageStopMarket(driver).isDisplayed();
}catch(NoSuchElementException e){
  try{  
    needOk = not TicketPage.errorMessageNotMoney(driver).isDisplayed();
  }catch(NoSuchElementException e){}
}

if(needOk) Assert.assertTrue(TicketPage.rateOkMessage(driver).isDisplayed());
HomePage.exitButton(driver).click();

  • 0


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

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