Я пишу тесты для веб-приложения, используя Selenium поверх Ruby, и у меня возникли некоторые проблемы.
В моем автоматизированном тесте selenium webdriver нажимает на элемент, который, в свою очередь, выполняет некоторый Javascript.
Javascript создает окно предупреждения, которое я обычно принимаю:
@IE.switch_to.alert.accept
Однако в этом случае управление не передается обратно в Webdriver, и я не могу принять предупреждение.
Кажется, что Javascript все еще выполняется - возможно, просто ждет принятия предупреждения.
Но поскольку веб-драйвер требует, чтобы javascript завершил выполнение ДО ТОГО, как он сможет принять предупреждение, предупреждение не может быть принято, и javascript никогда не завершит выполнение.
У меня нет разрешения на изменение Javascript, поэтому исправление должно быть на стороне селена.
Есть ли способ выполнить Javascript, не заставляя веб-драйвер ждать его?
----ОБНОВЛЕНИЕ 1-----
Как предложил комментатор, запуск javascript в отдельном потоке позволил мне восстановить контроль над веб-драйвером: ************ НЕПРАВИЛЬНО -- СМ. ОБНОВЛЕНИЕ 2 ************ ********
Thread.new{
button.press
}
К сожалению, я не могу обработать предупреждение, как обычно:
@IE.switch_to.alert
^ не работает
----ОБНОВЛЕНИЕ 2-----
Даже при запуске в потоке выполнение javascript по-прежнему блокирует любое дальнейшее выполнение веб-драйвером.
Я использую Selenium Grid для удаленного выполнения тестов.
Из-за этого я не могу отправлять нажатия клавиш или какие-либо сигналы на удаленный ПК, если только этот метод не предоставляется удаленным веб-драйвером, и поскольку веб-драйвер заблокирован выполнением Javascript (даже если он работает в отдельном потоке) Я не могу связаться с удаленным ПК после того, как выдано предупреждение.
Самая близкая идея, которую я имею для решения, похожа на то, что Мурали предложил ниже, и переопределить методы javascript теми, которые не возвращают предупреждения. Однако это очень далеко от идеала, методы javascript, которые я бы переопределил, многочисленны и сложны, некоторые из них имеют длину в сотни строк.
Если у кого-то есть что предложить по этому вопросу, мы будем очень признательны, поскольку эта проблема блокирует дальнейшее продвижение нашего проекта.
Спасибо!