弹框是否一直困扰着你呢?不如进来看看这个
一、概念描述
在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示:
在 WebDriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。
1.警告消息框(alert)
警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。
2.确认消息框(confirm)
确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。
3.提示消息对话(prompt)
提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。
selenium 提供switch_to_alert()方法定位到 alert/confirm/prompt对话框。使用 text/accept/dismiss/send_keys 进行操作,这里注意的是send_keys只能对prompt进行操作。
- switch_to_alert() #定位弹出对话
- text() #获取对话框文本值
- accept() #相当于点击"确认"
- dismiss() #相当于点击"取消"
- send_keys() # 输入值,这个alert和confirm没有输入对话框,所以这里就不能用了,所以这里只能使用在prompt这里。
①、接受弹窗
driver.switch_to_alert().accept()
②、得到弹窗的文本消息,比如得到:请输入用户名!
message=driver.switch_to_alert().text
print(message)
③、取消按钮
driver.switch_to_alert().dismiss()
④、输入值
driver.switch_to_alert().send_keys(“hello”)
二、实例演示
例1:
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com")
driver.execute_script("window.alert('这是一个测试Alert弹窗');")
driver.switch_to_alert().accept() # 点击弹出里面的确定按钮
#driver.switch_to_alert().dismiss() # 点击弹出上面的X按钮
例2:
# coding = utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dr = webdriver.Firefox()
dr.get("https://www.baidu.com/")
# 鼠标悬停至“设置”链接
# link = dr.find_element_by_link_text("设置") #这方法定位不了,又只能靠xpath
link = dr.find_element_by_xpath("html/body/div[1]/div[1]/div/div[3]/a[8]")
ActionChains(dr).move_to_element(link).perform()
time.sleep(5)
# 打开搜索设置
dr.find_element_by_link_text("搜索设置").click()
time.sleep(5)
# 保存设置
dr.find_element_by_class_name("prefpanelgo").click() # 这是保存按钮的class
time.sleep(5)
# 接受警告框
dr.switch_to_alert().accept()
dr.quit()
图:
switch_to_alert().accept() 接受窗现有警告框
switch_to_alert().text() 返回窗口的文字信息
switch_to_alert().dissmiss() 解散现有警告框
switch_to_alert().send_keys(keysToSend) 发送文本至警告框。keysToSend:将文本发送至警告框 # 没明白keysToSend是什么
例3:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_link_text("设置").click()
sleep(2)
driver.find_element_by_link_text("搜索设置").click()
sleep(3)
driver.find_element_by_link_text("保存设置").click()
sleep(3)
driver.switch_to_alert().accept()
sleep(3)
driver.close()
例4:
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
mouse = WebDriverWait(driver, 10).until(lambda x: x.find_element("link text", "设置"))
ActionChains(driver).move_to_element(mouse).perform()
WebDriverWait(driver, 10).until(lambda x: x.find_element("link text", "搜索设置")).click()
# 选择设置项
s = WebDriverWait(driver, 10).until(lambda x: x.find_element("id", "nr"))
Select(s).select_by_visible_text("每页显示50条")
# 点保存按钮
js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
driver.execute_script(js)
# 判断弹窗结果
result = EC.alert_is_present()(driver)
if result:
print (result.text)
result.accept()
else:
print ("alert 未弹出!")