欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-31 16:48:27
...

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

一、概念描述

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

在 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()
图:
Python+Selenium练习篇之1-处理Alert弹窗整理
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 未弹出!")

相关标签: alert