Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как работать с аллертами в appium+python?

webdriver
appium
python
Теги: #<Tag:0x00007fedbf359918> #<Tag:0x00007fedbf359580> #<Tag:0x00007fedbf3593a0>

(Ivan Pletin) #1

Пишу тесты для апликухи на IOs приложение, написано на React-native.
Пишу тесты на Python, запускаю на Appium
Сценарий такой, что я нажимаю на кнопку “добавить товар” и после этого вылазит попап с сообщением, мол все получилось. Попап висит 3 секунды и исчезает.
Подобный попап вылазит при удалении продукта, но тут в попапе есть две кнопки “подтвердить” и “отменить”.
В первом случае я просто хочу проверить что появился попап с конкретным текстом.
Во втором подтвердить или отменить действие.

Попап этот называется React-native Modal, и когда я пробую найти его использую инспектор - я не нахожу, он вроде как вне структуры страницы находится.

Я пробовал работать с попапом по аналогии из Селениума

WebDriverWait(self.driver, 3).until(EC.alert_is_present(), "Bla bla bla")
alert = self.driver.switch_to.alert()
alert.accept()

Но у меня ничего не выходит, тест валится после тайм аута, потому что не может достучаться до попапа.

Кто работал с подобными штуками, помогите плиз.


#2

С подобными штуками не работал, могу только подсказать направление.

Если окошко нативное, алерта ждать бессмысленно. Это работает для стандартных браузерных алертов. Но можно попробовать найти его как нативный элемент.

Аппиум может одновременно работать либо с нативными элементами, либо с вебом, для этого есть методы переключения контекста. Надо переключить его на нативный контекст, найти алерт (если его действительно так можно найти), и потом вернуться в веб.


(Dmitri Korobtsov) #3

Если как-то поможет, на Андроиде я тосты выцепляю так:
wait.until(ExpectedConditions.presenceOfElementLocated(errorMessageId));
и дальше - с этим ид и работаю…

Но мне проще, ид алерта известен.


(Nikita Barchugov) #4

У меня была инфа где-то, буду у компа отпишусь, если найду


(Nikita Barchugov) #5