我在浏览器中运行应用程序;对于某些动作,我能够用击键模拟动作;但我有一个特殊的问题:我的应用程序中的某些操作会导致系统提示弹出,例如保存或确认退出。
有没有办法在Selenium python中控制这些?例如想象使用击键来保存页面;然后出现系统对话框(不是Web应用程序的一部分),并询问您保存文件的位置。或者想象一下,如果您打开了多个标签页,则会询问您是否确定要关闭浏览器窗口。
我确实试图寻找一个不同的窗口,假设我可以在浏览器中的窗口之间切换上下文,但我在主应用程序旁边找不到任何内容,因为这些是系统窗口。有解决方法吗?
答案 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