Selenium-Python:与系统模态对话框交互

时间:2017-03-12 22:27:10

标签: python selenium

我在浏览器中运行应用程序;对于某些动作,我能够用击键模拟动作;但我有一个特殊的问题:我的应用程序中的某些操作会导致系统提示弹出,例如保存或确认退出。

有没有办法在Selenium python中控制这些?例如想象使用击键来保存页面;然后出现系统对话框(不是Web应用程序的一部分),并询问您保存文件的位置。或者想象一下,如果您打开了多个标签页,则会询问您是否确定要关闭浏览器窗口。

我确实试图寻找一个不同的窗口,假设我可以在浏览器中的窗口之间切换上下文,但我在主应用程序旁边找不到任何内容,因为这些是系统窗口。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

如果您正在谈论系统对话框,那么就无法使用selenium与它们进行交互。

但是,对于浏览器弹出窗口(警报),只需导航到弹出窗口:

driver.switch_to_alert()

然后,使用Alert类中的方法与弹出窗口进行交互。 Alert类包含从警报提示中解除,接受,输入和获取文本的方法。

一些例子:

Alert(driver).accept()
Alert(driver).dismiss()
Alert(driver).authenticate()
Alert(driver).send_keys(keys_to_send)
Alert(driver).text()

请参阅:https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.alert.html

答案 1 :(得分:0)

您可以使用Selenium方法检查当前窗口并移至另一个窗口:

您可以使用

driver.window_handles

查找窗口句柄列表,然后尝试使用以下方法切换(selenium documentation)。

  • driver.switch_to_alert()
  • driver.switch_to.active_element
  • driver.switch_to.default_content
  • driver.switch_to.window

由于您使用的应用程序,似乎在这里响应Selenium命令,它是一个关于打开弹出窗口,切换selenium范围,提取数据和关闭弹出窗口的工作示例。 对所有产品重复该过程:

for item in driver.find_elements_by_class_name("products"):
    item.click() # clicking on item activate a popup
    driver.switch_to_alert() #switch to new window
    # Get data
    driver.find_elements_by_css_selector(".ui-dialog-titlebar-close.ui-corner-all")[0].click() #close window