Python+Selenium练习篇之1-处理Alert弹窗整理

弹框是否一直困扰着你呢?不如进来看看这个

一、概念描述

在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示:

在 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:

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait( 6)
driver.get( "https://www.baidu.com")
time.sleep( 1)
driver.execute_script( "window.alert('这是一个测试Alert弹窗');")
time.sleep( 2)
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 未弹出!")

猜你喜欢

转载自blog.csdn.net/qq_42278579/article/details/81056352