selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!
一、Alert/Confirm/Prompt弹出窗口特征说明
Alert弹出窗口:
提示用户信息只有确认按钮,无法通过页面元素定位,不关闭窗口无法在页面上做其他操作。

Confirm 弹出窗口:
有确认和取消按钮,该弹出窗口无法用页面元素定位,不关闭窗口无法在页面上做其他操作。

Prompt弹出窗口:
有输入框、确认和取消按钮,该弹出窗口无法用页面元素定位,不关闭窗口无法在页面上做其他操作。

注意:3种窗口为浏览器自带的窗口,该窗口无法定位到元素,能定位到元素需要使用WebElement操作。
二、Alert/Confirm/Prompt弹出窗口操作
第一步:需要获取弹出窗口,两种方法 与Alert(driver)
alert=driver.switch_to.alert
或
-
from selenium.webdriver.common.alert import Alert -
alert=Alert(driver)
第二步:对获取到的窗口进行操作,常用方法如下:
alert.text() # 获取窗口信息alert.accept() # 确认alert.dismiss() # 取消alert.send_keys(keysToSend) # 输入信息
alert.authenticate(username, password) # 用户认证信息登录,已有确认操作
三、实例说明
创建下面3个html文件
alertTest.html
<html><head><title>Alert Test</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"/></head><script type="text/javascript">function showAlert(){alert(document.from1.t1.value);}function showMultilineAlert(){alert("你必须纠正以下错误:\n你必须输入XXXX.\n你必须做XXXX.\n你必须XXXX");}</script><body><h2>Alert Test</h2><form name="from1"><input type="text" name="t1" value="可以输入 Alert 信息"><br><br><input type="button" name="button1" value="点击Alert获取输入框信息" onclick="showAlert()"><br><br><input type="button" name="button2" value="Alert自带多行文本信息" onclick="showMultilineAlert()"><br></form></body></html>
confirmTest.html
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><title>Confirm Test</title></head><script type="text/javascript">function showConfirm(){var t1 = document.from1.t1;if (confirm("请点击确认或取消")){t1.value = "确认";}else{t1.value = "取消";}}</script><body><h2>Confirm Test</h2><form name="from1"><input type="button" name="button1" value="点击Confirm按钮" onclick="showConfirm()"><br><br><input type="text" name="t1"></form></body></html>
promptTest.html
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><title>Prompt Test</title></head><script type="text/javascript">function showPrompt(){var t1 = document.from1.t1;t1.value = prompt("请输入信息,信息将填入页面输入框.");}</script><body><h2>Prompt Test</h2><form name="from1"><input type="button" name="button1" value="点击Prompt按钮" onclick="showPrompt()"><br><br><input type="text" name="t1"></form></body></html>
示例1:Alert弹窗获取文本与确认操作
from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support.expected_conditions import alert_is_presentfrom selenium.webdriver.common.alert import Alertdriver = webdriver.Chrome()driver.get(r'E:\XXX\alertTest.html')driver.find_element_by_name('button1').click() # 点击第一个按钮WebDriverWait(driver, 5).until(alert_is_present()) # 等待弹出窗口出现alert = driver.switch_to.alert # 获取弹出窗口text1 = alert.text # 获取窗口文本信息print(text1) # 打印窗口文本信息alert.accept() # 确认print('----------')driver.find_element_by_name('button2').click() # 点击第二个按钮WebDriverWait(driver, 5).until(alert_is_present()) # 等待弹出窗口出现alert = Alert(driver) # 获取弹出窗口text1 = alert.text # 获取窗口文本信息print(text1) # 打印窗口文本信息alert.accept() # 确认driver.quit()
注意:WebDriverWait(driver, 5).until(alert_is_present()) 加上这个可提高代码的可靠性
示例2:Comfirm弹窗获取文本、确认、取消操作
driver = webdriver.Chrome()driver.get(r'E:\XXX\confirmTest.html')driver.find_element_by_name('button1').click() # 点击按钮WebDriverWait(driver, 5).until(alert_is_present()) # 等待弹出窗口出现alert = driver.switch_to.alert # 获取弹出窗口print(alert.text) # 打印窗口信息alert.accept() # 确认time.sleep(2)driver.find_element_by_name('button1').click() # 点击按钮WebDriverWait(driver, 5).until(alert_is_present()) # 等待弹出窗口出现alert = driver.switch_to.alert # 获取弹出窗口alert.dismiss() # 取消time.sleep(2)driver.quit()
示例3:Prompt 弹窗获取文本、输入内容、确认操作
driver = webdriver.Chrome()driver.get(r'E:\XXX\promptTest.html')driver.find_element_by_name('button1').click() # 点击按钮WebDriverWait(driver, 5).until(alert_is_present()) # 等待弹出窗口出现alert = Alert(driver) # Alert 获取弹出窗口alert.send_keys('selenium Alert弹出窗口输入信息') # 输入信息alert.accept() # 确认time.sleep(2)driver.quit()
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!
一、Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口: 提示用户信息只有确认按钮,无法通过页面元素定位,不关闭窗口无法在页面上做其他操作。 Confirm 弹出窗口: 有确认和取消按钮,该弹出窗口无法用页面元素定…...
探索JavaScript 18:新特性全解析
JavaScript,作为全球最广泛使用的编程语言之一,每年的更新都备受开发者社区的关注。2023年,JavaScript的新版标准——ECMAScript 2023(也称为JavaScript 18)引入了多项激动人心的新特性,这些特性不仅优化了…...
Python第二语言(七、Python模块)
目录 1. 什么是模块 2. 基本语法 2.1 模块的导入方式 2.2 基本语法 import 模块名 2.3 基本语法 from 模块名 import 功能名 2.4 基本语法as 别名 3. 自定义模块 4. 调用自定义模块时,如何让其模块中的函数不被调用(__name__) 5. 调…...
介绍单例模式
描述 保证一个类只有一个实例,并且提供一个全局访问点 场景: 重量级的对象,不需要多个实例,如线程池,数据库连接池 实现 1. 懒汉模式 延迟加载的方式 只有在真正使用的时候,才开始实例化线程安全问题…...
【C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重载
目录 一、 日期类的实现 Date.h 1.1 GetMonthDay函数(获取某年某月的天数) 问:这个函数为什么不和其他的函数一样放在Date.cpp文件中实现呢? 1.2 CheckDate函数(检查日期有效性)、Print函数(…...
来腾讯第4天,我已经焦虑昏了啊!
大家好,我是白露啊。 今天在看到一个实习生在抱怨,给我笑惨了。 标题是:“腾讯实习第4天,焦虑昏了”! 他写道:“怎么办啊牛爷爷们,什么都不会。业务看不懂,文档看不懂,…...
MacOS升级ruby版本
MacOS自带ruby版本是2.x,可以通过“ruby -v”查看版本号 $ ruby -v ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin22]homebrew安装的ruby版本号可以通过“brew info ruby”命令参看 $ brew info ruby > ruby: stable 3.3.2 (bottled)…...
【MySQL数据库基础】
🌈个人主页:努力学编程’ ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 …...
QT系列教程(9) 主窗口学习
简介 任何界面应用都有一个主窗口,今天我们谈谈主窗口相关知识。一个主窗口包括菜单栏,工具栏,状态栏,以及中心区域等部分。我们先从菜单栏说起 菜单栏 我们创建一个主窗口应用程序, 在ui文件里的菜单栏里有“在这里输入”的一个…...
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模拟实现list与迭代器 🌹🌹期待您的关注 🌹🌹 ❀stack和queue Ǵ…...
SpringBoot发邮件服务如何配置?怎么使用?
SpringBoot发邮件需要的参数?邮件发送性能如何优化? 在SpringBoot项目中配置发邮件服务是一个常见的需求,它允许我们通过应用程序发送通知、验证邮件或其他类型的邮件。AokSend将详细介绍如何在SpringBoot中配置发邮件服务。 SpringBoot发邮…...
AutoCAD Mechanical机械版专业的计算机辅助设计软件安装包下载安装!
AutoCAD机械版作为一款专业的计算机辅助设计软件,不仅具备卓越的二维绘图功能,更是拥有令人瞩目的3D建模工具,为机械设计师们提供了前所未有的创作空间。 在AutoCAD机械版的3D建模环境中,用户可以借助一系列简洁明了的命令&#…...
json.load报错AttributeError: ‘str‘ object has no attribute ‘load‘
with open(json_file, r) as f:data json.load(f)要写个简单的数据处理脚本,报错AttributeError: ‘str’ object has no attribute ‘load’,查看了一下,路径正确,查了半天博客,不知道错在哪里。 回头一看 jsons_pa…...
单词记忆(第二周)
transplant: trans - plant 移植 perceive: per - ceive 察觉 paraphrase: para - ph - rase 释义 prospect: pro - s - pect 前景 access: ac - cess 进入,通道,访问 generous; gene - rous 慷慨的,丰富的 lecture: lec - ture 讲座 …...
RAG:如何从0到1搭建一个RAG应用
通过本文你可以了解到: 什么是RAG?如何搭建一个RAG应用?目前开源的RAG应用有哪些? 大模型学习参考: 1.大模型学习资料整理:大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业…...
leetcode:67二进制求和
题目链接:67. 二进制求和 - 力扣(LeetCode) class Solution { public:string addBinary(string a, string b) {int stralen a.size(), strblen b.size();int curtc;int Maxlen max(stralen, strblen);vector<int> stra;vector<i…...
大模型日报2024-06-10
大模型日报 2024-06-10 大模型资讯 无需矩阵乘法的语言模型在亿参数规模上表现优异 摘要: 研究表明,无需矩阵乘法的语言模型在亿参数规模上仍能保持顶级性能。这一发现挑战了传统神经网络依赖矩阵乘法的观点,展示了在GPU优化之外的新可能性。 博弈论助力…...
【博士每天一篇文献-综述】Modularity in Deep Learning A Survey
阅读时间:2023-12-8 1 介绍 年份:2023 作者:孙浩哲,布朗克斯医疗卫生系统 会议: Science and Information Conference 引用量:4 论文主要探讨了深度学习中的模块化(modularity)概念…...
Sentinel不使用控制台基于注解限流,热点参数限流
目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意,使用的版本需要和你的SpringBoot版本匹配!! Spring-Cloud直接添加如下依赖即可,baba已经帮你指定好版本了。…...
HTML做成一个端午节炫酷页面
做成端午节页面之前,先了解一下端午节的由来: 1.起源与历史: 端午节起源于中国,始于春秋战国时期,至今已有2000多年历史。 最初是古代百越地区(长江中下游及以南一带)崇拜龙图腾的部族举行图…...
CoverM深度解析:如何高效配置PacBio HiFi宏基因组数据覆盖率分析的完整指南
CoverM深度解析:如何高效配置PacBio HiFi宏基因组数据覆盖率分析的完整指南 【免费下载链接】CoverM Read alignment statistics for metagenomics 项目地址: https://gitcode.com/gh_mirrors/co/CoverM CoverM作为一款专业的宏基因组读长覆盖率计算工具&…...
HC32F4A0 ADC+DMA实战:8通道模拟量采集,从时钟配置到数据搬运的保姆级避坑指南
HC32F4A0 ADCDMA实战:8通道模拟量采集全流程精解与典型问题排查 在工业控制、智能家居和物联网设备开发中,多通道模拟信号采集是嵌入式系统的基础功能。HC32F4A0作为华大半导体推出的高性能MCU,其ADC模块配合DMA控制器可实现高效的数据采集方…...
手机号定位终极指南:3分钟搭建免费归属地查询系统
手机号定位终极指南:3分钟搭建免费归属地查询系统 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors/…...
Sunshine游戏串流服务器完整指南:三步搭建个人游戏云
Sunshine游戏串流服务器完整指南:三步搭建个人游戏云 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款强大的开源自托管游戏串流服务器,专为M…...
LOSEHU固件深度解析:泉盛UV-K5/K6全功能固件架构与实战部署指南
LOSEHU固件深度解析:泉盛UV-K5/K6全功能固件架构与实战部署指南 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom LOSEHU固件是一款专为…...
AI 入门 30 天挑战 - Day 28 - 前沿技术概览
🌟 完整项目和代码 本教程是 AI 入门 30 天挑战 系列的一部分! 💻 GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-Challenge📖 CSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐ 欢迎 Star 支持!…...
开源AI智能体记忆服务:构建持久化共享记忆中枢
1. 项目概述:为AI智能体构建持久化共享记忆中枢 如果你正在构建或使用基于LangGraph、CrewAI、AutoGen这类框架的多智能体系统,或者你厌倦了每次与Claude、Cursor等AI助手开启新会话时都要重复解释项目背景,那么你很可能正面临一个核心痛点&…...
Kubernetes Service Mesh进阶:Linkerd实践与对比
Kubernetes Service Mesh进阶:Linkerd实践与对比 一、引言 服务网格(Service Mesh)是云原生架构中用于管理服务间通信的基础设施层。Linkerd作为第二代服务网格,以其轻量、高性能的特点备受关注。本文将深入探讨Linkerd的核心概念、实践部署以及与Istio的…...
3分钟极速获取百度网盘提取码:开源工具的终极使用指南
3分钟极速获取百度网盘提取码:开源工具的终极使用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次看到那个小小的输入框,是不是感觉宝贵的…...
LDO噪声特性分析与测量优化指南
1. LDO噪声特性与测量基础低噪声线性稳压器(LDO)作为电源管理系统的核心器件,其噪声特性直接影响着精密模拟电路、射频系统和传感器等关键模块的性能表现。与开关电源不同,LDO通过线性调节方式工作,避免了高频开关噪声…...
