Добрый день,я начинающий автоматизатор.Столкнулся со следующей задачей -
Java+Appium+Android
Есть приложение,в этом приложении при логине,может рандомно выскакивать окно с оповещением при котором нужно только нажать “ОК”.
Проблема состоит в том,что это окно может как появляться так и не появляться.Соотвественно когда оно не появляется тест проходит успешно,в противном случае,валится.Каким образом можно сделать примерно следующее
Проверяем появилось ли окно с оповещением -> если появилось клацаем ОК и выполняем код дальше/если не появилось просто выполняем код дальше
Код который работает для нажатия на клавишу,но дальнейший тест код в тесте все равно не выполняется,а если же оповещение не всплывает то тест валится уже на этом коде,так как не может обнаружить кнопку
Напишите метод который будет возвращать true или false в зависимости от того найден элемент или нет через try catch
Ну и будет код выглядеть где то так
if(ElementExist(любой локатор который относится к попапу)){
driver.FindElement(Кнопка ок).Click();
}
boolean isPresent = androidDriver.findElementsById("android:id/button2").size() > 0;
if (isPresent) {
MobileElement message1 = (MobileElement) androidDriver.findElementById("android:id/button2");
message1.click();
System.out.println("clicked");
{
}
}
List<MobileElement> elementsById = androidDriver.findElementsById("ххх/rv_city_name");
for (MobileElement element : elementsById) {
if (element.getText().equals("Киев")) {
element.click();
}
}
}
}
теперь проблема в том что после того как просиходит нажатие на кнопку ОК,аппиум не может обнаружить других кнопок на экране.Вторая часть кода рабочая на 100%,сложилось впечатление что он пытается искать это на экране там где выскакивает месседж по которому мы кликаем.
Возможно стоит добавить ожидание в пару секунд?
А то что у Вас сломано приложение в котором временами пропадает доступ к одному из внешних сервисов Вас не смущает? Я бы на Вашем месте “замокал” внешнюю зависимость которая не нужна Вам при тестировании одного из Ваших сценариев (если этот сервис действительно не влияет на Вашу функциональность). Appium Pro: Making Your Appium Tests Fast and Reliable, Part 8: Mocking External Services
Просто предложения использовать условия в тестах являются одним из анти-паттернов тестирования и стоит сразу привыкать писать тесты без них, иначе научитесь делать эти костыли-велосипеды при каждом удобном случае и будет потом тяжело отказатся от применения такого подхода. И нужно помнить что никакого рандома в коде приложения и тестов быть никогда не должно.
у вас какое-то идеалистичное представление о тестировании. Понятное дело, что в книжках и на курсах умные люди предлагают действительно хорошие и понятные вещи, но наша задача решать потребности бизнеса, а не делать православные тесты, где нет условий и всё замокано.
Очень сомневаюсь что потребность бизнеса в том чтобы получить поломаный функционал с костылем который игнорирует эту поломку. И такие ответы отом что я так сделал ибо бизнес требует автотесты уже на вчера, я тоже слышу каждый день. В этом и есть разница между кодером автотестов и QA инженером, одному нужно сдать кучу говнотестов заказчику, а другому поставить качественно работающий функционал.
о эти реляции и песнопения
ваша задача как инженера тестирования сказать, насколько вы уверены в том, что что-то работает и оценить риски, не более того. решать быть релизу или нет, в большинстве случаев, не вам.
Если вы работаете в компании и на том проекте, где у вас есть право заблокировать релиз, то это реально очень круто. но когда на релизную политику завязаны премии (очень большие) серьезных дядь, ваше стремление поставить качественно работающий функционал не завтра, а через месяц, воспринято будет как минимум негативно
Это в полне реальные функции приложения - у меня новый юзер при заходе на стартовую страницу получает релиз-ноутс, а во второй раз при заходе - сообщения нет. И это не фига не баг приложения)