web应用中,经常会遇到弹框。不处理弹框,页面其他元素都是不能操作的。js弹框有3种:alert警告框、confirm确认窗口、prompt信息输入窗口。
webdriver提供了处理这3种弹框的方法。首先通过switch_to定位到弹框,然后针对弹框的不同,可以使用
accept/dismiss/text/send_keys进行处理。
用法演示
1,alert警告框
一般用于提示信息或者警告信息的展示。以百度搜索首页html,演示其用法。
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.common.exceptions import NoAlertPresentException#封装判断弹框是否出现方法def alert_is_present(): try: driver.switch_to.alert return True except NoAlertPresentException: return Falsedriver = webdriver.Chrome()driver.get('https://www.baidu.com/')driver.implicitly_wait(10)driver.maximize_window()#鼠标在设置按钮悬停set_but = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')ActionChains(driver).move_to_element(set_but).perform()#点击搜索设置driver.find_element_by_link_text('搜索设置').click()#点击保存设置driver.find_element_by_link_text('保存设置').click()#切换到警告框,并接受if alert_is_present() == True: driver.switch_to.alert.accept()driver.quit()
2,confirm确认窗口
这个窗口包含一个【确定】和【取消】按钮,点击按钮,弹窗会返回一个布尔值。确认返回true,取消返回false,由此可以判断用户的操作。
以菜鸟工具页面展示其用法。
from selenium import webdriverfrom selenium.common.exceptions import NoAlertPresentExceptiondriver = webdriver.Firefox()driver.implicitly_wait(10)driver.get('https://c.runoob.com/codedemo/5431')driver.maximize_window()#封装判断弹框是否出现方法def alert_is_present(): try: driver.switch_to.alert return True except NoAlertPresentException: return False#点击【点我】按钮driver.switch_to.frame('iframeResult')driver.find_element_by_xpath('/html/body/button').click()#点击【取消】按钮if alert_is_present() == True: driver.switch_to.alert.dismiss() print('dismiss')driver.quit()
3,prompt信息输入窗口
用户可以在弹框输入字符串,点击确认后,页面会返回输入框内的字符串。
以菜鸟工具页面展示其用法。
from selenium import webdriverfrom selenium.common.exceptions import NoAlertPresentExceptiondriver = webdriver.Firefox()driver.implicitly_wait(10)driver.get('https://www.runoob.com/try/try.php?filename=tryjs_prompt')driver.maximize_window()#封装判断弹框是否出现方法def alert_is_present(): try: driver.switch_to.alert return True except NoAlertPresentException: return False#点击【点我】按钮driver.switch_to.frame('iframeResult')driver.find_element_by_xpath('/html/body/button').click()#点击【取消】按钮if alert_is_present() == True: driver.switch_to.alert.send_keys('小蛋黄') driver.switch_to.alert.accept() text = driver.find_element_by_xpath('//*[@id="demo"]').text print(text)driver.quit()