Appium Python WebDriverWait wait.until(Ожидаемые_условия.alert_is_present()) случайный сбой
У меня есть тестовый класс Appium, тестирующий приложение для iOS с двумя почти идентичными тестами внутри:
def test_fail(self):
self.log_in('invalid_user_1')
self.wait.until(expected_conditions.alert_is_present())
alert = self.driver.switch_to.alert
assert "Your mobile number is not registered with us" in alert.text
alert.accept()
def test_normal(self):
self.log_in('empty')
self.wait.until(expected_conditions.alert_is_present())
alert = self.driver.switch_to.alert
assert 'Please enter mobile number' in alert.text
alert.accept()
Когда я запускаю тест test_fail (он запускается раньше, чем test_normal), он всегда не сможет перехватить предупреждение с ошибкой:
WebDriverException: Сообщение. При обработке команды произошла неизвестная ошибка на стороне сервера. Исходная ошибка: была сделана попытка работать с модальным диалоговым окном, когда оно не было открыто.
* Test_normal работает, хотя. Я попытался закомментировать test_normal, test_fail потерпит неудачу с тем же сообщением.
Затем я пытаюсь закомментировать test_fail, но на этот раз test_normal будет работать. Поэтому по какой-то странной причине test_fail просто не будет работать с self.wait.until(expected_conditions.alert_is_present())
Однако, если я заменю строку test.fail test wait.until:
self.wait.until(expected_conditions.alert_is_present())
с:
self.wait_for('OK')
Тогда все будет работать.
Self.wait объявляется в def setUp(self) self.wait = WebDriverWait(self.driver, 120)
Я использую Appium 1.7.2 (Appium GUI 1.4.0) в Mac OS X. Тестовая iOS запускается на симуляторе iPhone 7 с ОС 11.2.
Трассировка стека ошибок:
Error
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 331, in run
testMethod()
File "/Users/steve/Desktop/Temp/Appium/Ding_ios_aws/ios_aws/tests/test_invalid_login.py", line 16, in test_invalid_user_login
self.wait.until(expected_conditions.alert_is_present())
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/selenium/webdriver/support/wait.py", line 71, in until
value = method(self._driver)
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/selenium/webdriver/support/expected_conditions.py", line 387, in __call__
alert = driver.switch_to.alert
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py", line 55, in alert
alert.text
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/selenium/webdriver/common/alert.py", line 69, in text
return self.driver.execute(Command.GET_ALERT_TEXT)["value"]
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
self.error_handler.check_response(response)
File "/Users/steve/venv/Appium/lib/python2.7/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response
raise wde
WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: An attempt was made to operate on a modal dialog when one was not open.
Может ли кто-нибудь помочь мне понять, что происходит?
1 ответ
Скорее всего, вы столкнулись с ошибкой https://github.com/appium/appium/issues/10286.
Ошибка: в первом пинге / проверке самого оповещения, если оповещение отсутствует, Appium выдает исключение, не дожидаясь заданного времени.
Эта ошибка недавно зарегистрирована (15 дней назад). попробуйте последнюю версию. Я думаю, что это исправлено в последней версии бета.
Также см. https://github.com/facebook/WebDriverAgent/issues/857, где говорится, что это проблема Appium, но не WebDriver.
Временное решение: добавьте 1-3 секунды сна, чтобы убедиться в наличии предупреждения, прежде чем проверять явное условие.