Добрый день. Я новичек в автоматизации, нуждаюсь в подсказке)
Написал фрейворк для тестирования сайта, использую 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) можно посмотреть?
Если у Вас PageObject тогда почему в тесте везде driver? - значит еще плохо вьехал в эту тему…учусь только. Буду благодарен если подскажете как его убрать) Но пока не это основная проблема.
У вас каждый элемент как отдельный метод в который надо передавать driver? - пока да, так
public static WebElement errorMessageStopMarket(WebDriver driver) throws ElementNotFoundException{
element = driver.findElement(By.xpath("//li[@class = \"err_1031\"]/i"));
return element;
На сколько я понял данный элемент у вас во всех трёх if. При это ругается на локатор этого элемента. Он точно рабочий? Если да, то добавьте ожидание перед кликом.
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