【1】弹出框有两种
- 页面弹出框;
- JavaScript(Windows浏览器) 弹出框,包括Alert(警告)、confirm(确认)、prompt(提问);
【2】页面弹出框
是一个html 页面的元素。只不过,是由用户在页面的操作触发弹出。
所以处理这一类型的弹出框,一般是:
- 执行触发操作之后,等待弹出框出现之后;
- 再定位弹出框中的元素并操作。
示例:百度登录的弹出框
在百度首页:需要用户点击登录按钮,登录弹出框才会出现。才可以进行登录操作。
代码:
from selenium import webdriver
#显性等待 --引入库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_xpath('//*[@id="ul"]//*[@name="tj_login"]').click()
#1/等待弹出框中,要操作的元素可见
ele_id = 'TANGRAM_PSP_10_footerUloginBtn'
param = (By.ID,ele_id)
WebDriverWait(driver,10).until(EC.visibility_of_element_located(param))
#2、再去操作元素
driver.find_element_by_id(ele_id).click()
【3】JavaScript(Windows浏览器) 弹出框
在WebDriver 中处理JavaScript 所生成的alert、confirm 以及prompt 十分简单,具体做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt ,然后使用 text/accept/dismiss/send_keys等方法进行操作
text:返回 alert/confirm/prompt 中的文字信息
accept():接受现有警告框
dismiss():解散现有警告框
send_keys(keysToSend):往弹出框里输入文本
实例一:处理Alert 弹出框的自动化代码
from selenium import webdriver
#显性等待 --引入库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("D:\\test-3.html")
#点击页面的元素,触发alert 弹出框
driver.find_element_by_id("press").click()
import time
#1、等待弹窗
WebDriverWait(driver,20,1).until(EC.alert_is_present())
#2、从html 页面切换到 alert ----实例化一个Alert 类
alert = driver.switch_to.alert
#3、获取alert 的文本内容
text = alert.text
#4、接受
alert.accept()
#退出浏览器
driver.quit()
实例二:百度搜索页面
百度搜索页面设置弹出的窗口是不能通过前端工具对其进行进行定位的,这个时候就可以通过switch_to_alert()方法接受这个弹窗
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
#鼠标悬停至“设置”链接
link = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(link).perform()
#打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
#保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)
#接受弹出框
driver.switch_to_alert().accept()
driver.quit()
这个例子中,ActionChains 类所提供的 move_to_element()鼠标悬停的使用,将鼠标悬停在“设置”链接上,然后在弹出的下拉菜单中单击“搜索设置”按钮,设置完成后单击”保存设置“,弹出保存确认警告框。通过switch_to_alert()方法获取当前页面上的警告框,并使用accept()方法接受警告框。