Нажмите всплывающее окно JavaScript через веб-драйвер - PullRequest
17 голосов
/ 26 декабря 2011

Я очищаю веб-страницу с помощью Selenium webdriver на Python

Веб-страница, над которой я работаю, имеет форму.Я могу заполнить форму, а затем нажимаю кнопку «Отправить».

Она создает всплывающее окно (Javascript Alert).Я не уверен, как нажать на всплывающее окно через веб-драйвер.

Есть идеи, как это сделать?

Спасибо

Ответы [ 5 ]

24 голосов
/ 29 мая 2012

Python Webdriver Script:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")
alert = browser.switch_to_alert()
alert.accept()
browser.close()

Веб-страница (alert.html):

<html><body>
    <script>alert("hey");</script>
</body></html>

При запуске сценария веб-драйвера откроется страница HTML, на которой отображается предупреждение.Webdriver немедленно переключается на предупреждение и принимает его.Затем Webdriver закрывает браузер и завершает работу.

Если вы не уверены, что будет оповещение, вам нужно отловить ошибку примерно так:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/no-alert.html")

try:
    alert = browser.switch_to_alert()
    alert.accept()
except:
    print "no alert to accept"
browser.close()

Если вам нужно проверитьтекст оповещения, вы можете получить текст оповещения, обратившись к текстовому атрибуту объекта оповещения:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")

try:
    alert = browser.switch_to_alert()
    print alert.text
    alert.accept()
except:
    print "no alert to accept"
browser.close()
4 голосов
/ 13 февраля 2014
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
#do something
if EC.alert_is_present:
    print "Alert Exists"
    driver.switch_to_alert().accept()
    print "Alert accepted"
else:
    print "No alert exists"

Подробнее об особых условиях https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

1 голос
/ 29 мая 2012

Если вы хотите принять или щелкнуть всплывающее окно, независимо от того, что это такое, то

alert.accept

Где alert является объектом класса selenium.webdriver.common.alert.Alert(driver) и accept является методом этого объекта

Источник

1 голос
/ 26 декабря 2011

Я использую привязки Ruby, но вот что я нашел в документации по Selenium Python Bindings 2: http://readthedocs.org/docs/selenium-python/en/latest/index.html

Selenium WebDriver имеет встроенную поддержку для обработки всплывающих диалоговых окон. После запуска и действия, которое откроет всплывающее окно, вы можете получить доступ к предупреждению с помощью следующего:

alert = driver.switch_to_alert()

Теперь, я думаю, вы можете сделать что-то подобное:

if alert.text == 'A value you are looking for'
  alert.dismiss
else
  alert.accept
end

Надеюсь, это поможет!

0 голосов
/ 26 декабря 2011

, это зависит от функции JavaScript, которая обрабатывает отправку формы если такой функции нет, попробуйте отправить форму, используя сообщение

...