t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f7481894d40> #<Tag:0x00007f7481894c78> #<Tag:0x00007f7481894bb0> #<Tag:0x00007f7481894ae8>

Добрый день. Я новичек в автоматизации, нуждаюсь в подсказке)
Написал фрейворк для тестирования сайта, использую 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 находится елемент из первого ифа.). Ума не приложу
почему если елемента нет, программа не переходит к следующему ифу.

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

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

Если у Вас PageObject тогда почему в тесте везде driver?
У вас каждый элемент как отдельный метод в который надо передавать driver?
Код для errorMessageStopMarket(driver) можно посмотреть?

  1. Если у Вас PageObject тогда почему в тесте везде driver? - значит еще плохо вьехал в эту тему…учусь только. Буду благодарен если подскажете как его убрать) Но пока не это основная проблема.
  2. У вас каждый элемент как отдельный метод в который надо передавать driver? - пока да, так
  3. public static WebElement errorMessageStopMarket(WebDriver driver) throws ElementNotFoundException{
     element = driver.findElement(By.xpath("//li[@class = \"err_1031\"]/i"));
     return element;
    
    }

На сколько я понял данный элемент у вас во всех трёх if. При это ругается на локатор этого элемента. Он точно рабочий? Если да, то добавьте ожидание перед кликом.

нет, для каждого элемента написан похожий метод, который возвращает нужное значение xpath. Все xpath точно рабочие, перепроверял уже 100 раз

Что значит похожий метод, если у Вас в коде из первого сообщения строка: HomePage.exitButton(driver).click(); повторяется три раза в каждом if

в этом методе да, лдин xpath. Во всех остальных разные. Но дело в том что до метода HomePage.exitButton(driver).click(); дело даже не доходит

Потому что у вас каждый элемент вот так ищется:

public static WebElement errorMessageStopMarket(WebDriver driver) throws ElementNotFoundException{
element = driver.findElement(By.xpath("//li[@class = \"err_1031\"]/i"));
return element;
}

Если элемента на странице нет, то у вас будет эксепшен, потому что он его не может найти. Либо добавляйте условие что при НотФаунд возвращаться false или не изобретайте велосипед, а используйте готовые решения где это всё уже есть.

if’ы в тестах это моветон и бездна.
тест должен быть повторяем / линеен - в нем не должно быть логики, иначе придется писать автотесты на автотесты

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

разбить на N кол-во тестов. 1 тест - 1 сценарий

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

Ваш PageObject какой то совсем не правильный.
Драйвера в тестах быть не должно
Вызовов методов IWebElement’а в тестах быть не должно - вся работа с элементами находится в классе - странице
и т.п.

вот отличные видео, хоть им уже 6 лет, но актуальность в целом, они свою не потеряли.
для начала must see

part1

part2