Selenium弹框事件

前言:执行自动化测试过程中遇到不同的弹框,使用selenium如何处理?

1、弹框分类

  • 页面弹框
  • 警告提示框(alert)
  • 确认消息框(confirm)
  • 提示消息框(prompt)

提示:selenium 提供switch_to.alert方法定位到alert/confifirm/prompt对话框


2、弹框的常用操作

# 打开Chrome浏览器
driver = webdriver.Chrome(executable_path="../login/chromedriver.exe")

alert = driver.switch_to.alert  # 切换到弹框界面
alert.text                      # 得到弹窗文本信息
alert.accept()                  # 接受警告信息
alert.dismiss()                 # 取消对话框(如果有取消按钮)
alert.send_keys()               # 输入值(如果有输入框)

3、操作示例

(1)页面弹框

页面弹框是属于HTML里面的元素,它是由用户在操作页面的时候在本页面弹出的。所以可以直接在页面上定位到。

# 引入selenium库和time库
from selenium import webdriver
import time


# 打开Chrome浏览器
driver = webdriver.Chrome(executable_path="../login/chromedriver.exe")

# 访问百度
driver.get("https://www.baidu.com/")

# 使用css定位点击百度首页登录按钮
driver.find_element_by_css_selector('#u1 > a.s-top-login-btn.c-btn.c-btn-primary.c-btn-mini.lb').click()

# 等待2秒钟页面渲染出来
time.sleep(2)

# 弹框出现后,我们直接定位元素操作就好了
driver.find_element_by_id('TANGRAM__PSP_4__closeBtn').click()

(2)警告提示框(alert)

警告提示框 是必须先关闭了用户才能操作的框,它提供了一个确认按钮,以及警告消息。

# 引入selenium库和time库
from selenium import webdriver
import time


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 打开本地的html页面
driver.get(r"D:\ac\test.html")

# 根据id点击alert按钮
driver.find_element_by_id('alert').click()

# 切换到alert的弹框
alert = driver.switch_to.alert

# text获取弹框的文本内容
text = alert.text
print(text)

# 设置等待时间
time.sleep(2)

# 点击弹框的确定
alert.accept()

(3)确认消息框(confirm)

确认消息框 使用确认消息框可向用户问一个"是"或"否"问题,并且用户可以选择单击"确定"按钮或者单击"取消"按钮。confirm 方法的返回值为 true 或 false。该消息框也是模式对话框:用户必须在响应该对话框(单击一个按钮)将其关闭后,才能进行下一步操作。

# 引入selenium库和time库
from selenium import webdriver
import time


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 打开本地的html页面
driver.get(r"D:\ac\test.html")

# 根据id点击confirm按钮
driver.find_element_by_id('confirm').click()

# 切换到confirm的弹框
confirm = driver.switch_to.alert

# text获取弹框的文本内容
print(confirm.text)

# 设置等待时间
time.sleep(2)

# 点击弹框的取消
# confirm.dismiss()

# 点击弹框的确定
confirm.accept()

(4)提示消息框(prompt)

提示消息框 提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数,则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则,默认文本为 "undefined"。

# 引入selenium库和time库
from selenium import webdriver
import time

# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 打开本地的html页面
driver.get(r"D:\ac\test.html")

# 根据id点击prompt按钮
driver.find_element_by_id('prompt').click()

# 切换到prompt的弹框
prompt = driver.switch_to.alert

# 打印提示框内容
print(prompt.text)

# 在提示框输入值
prompt.send_keys('1')

# 设置等待
time.sleep(2)

# 点击弹框的取消
# prompt.dismiss()

# 点击弹框的确定
prompt.accept()

4、弹框的html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<a href="javascript:alert('提示框')" id="alert" >Alert弹框</a><br>
<br>
<a href="javascript:confirm('此操作将删除数据')" id="confirm">Confirm弹框</a><br>
<br>
<a href="javascript:var age = prompt('请输入年龄');document.write(age)" id="prompt">Prompt弹框</a><br>

</body>
</html>




实例:

# 引入selenium库和time库
from selenium import webdriver
import time

# 打开Chrome浏览器
driver = webdriver.Chrome(executable_path="../login/chromedriver.exe")

# 访问百度
driver.get("https://www.baidu.com/")

# 设置全局等待时间,默认每0.5秒检查一次,最长10秒未检查到则超时
driver.implicitly_wait(10)

# 使用css定位到设置的按钮
link = driver.find_element_by_css_selector("#s-usersetting-top")

# 鼠标悬停到设置的按钮上
ActionChains(driver).move_to_element(link).perform()

# 点击搜索设置
driver.find_element_by_css_selector("#s-user-setting-menu > div > a.setpref.first > span").click()

# 点击保存设置
driver.find_element_by_css_selector("#se-setting-7 > a.prefpanelgo.setting-btn.c-btn.c-btn-primary").click()

# 定位到弹框
alert = driver.switch_to.alert

# 获取弹框的内容
text = alert.text

# 打印弹框的内容
print(text)

# 关闭弹框操作
alert.accept()

image

image

posted @ 2023-03-17 14:32  ll=ll  阅读(185)  评论(0编辑  收藏  举报