《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗
1.简介
我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。宏哥在java+selenium系列文章中介绍过这部分内容。那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?下面我们就来介绍一下playwright对于弹框的处理。
2.弹框分类
弹框通常分为3种,分别为alert,confirm,promot。
- alert弹框:只有信息和确定按键
- confirm弹框:在alert弹窗基础上增加了取消按钮
- prompt弹框:在confirm的基础上增加了可输入文本内容的功能
3.dialog 弹窗
3.1dialog属性和方法
accept()当对话框被接收时返回。
dialog.accept()
dialog.accept(**kwargs)
参数 prompt_text(可选), 要在提示中输入的文本。如果对话框 type 没有提示,则不会产生任何影响.
default_value, 如果对话框是提示的,则返回默认提示值。否则,返回空字符串。
dialog.default_value
dismiss 关闭对话框
dialog.dismiss()
message 获取对话框中显示的消息
dialog.message
type返回对话框的类型,可以是alert, beforeunload, confirm或 prompt其中一个
dialog.type
3.2dialog 事件监听
playwright 框架可以监听dialog事件,不管你alert 什么时候弹出来,监听到事件就自动处理了。
当出现 JavaScript 对话框时发出,例如alert、prompt。监听器必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。
#弹窗中确认
page.on("dialog", lambda dialog: dialog.accept())
page.locator("button").click()
#弹窗中取消
page.on("dialog", lambda dialog: dialog.dismiss())
page.locator("button").click()
注:当没有page.on("dialog")侦听器存在时,所有对话框都会自动关闭。
语法如下:
page.on("dialog", handler)
3.模态框的定义
模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
3.1警告框
警告框经常用于确保用户可以得到某些信息。
当警告框出现后,用户需要点击确定按钮才能继续进行操作。
语法:
alert("文本")
3.2确认框
确认框用于使用户可以验证或者接受某些信息。
当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。
语法:
confirm("文本")
3.3提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
语法:
prompt("文本","默认值")
3.4测试页面准备
ModalDialogueBox.html页面参考代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模态框</title>
</head>
<script type="text/javascript">
window.onload = function(){
document.getElementById("input_1").onclick = function(){
alert("您关注了‘北京宏哥’微信公众号!");
};
document.getElementById("input_2").onclick = function(){
confirm("确定关注微信公众号:北京宏哥?")
};
document.getElementById("input_3").onclick = function(){
prompt("请输入微信公众号:","北京宏哥");
};
} </script>
<style>
.button1 {
background-color: #f44336;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 28px;
margin-bottom: 100px;
text-decoration:none;
color: white;
}
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
}
#myAnchor
{
text-decoration:none;
color: white;
}
</style>
<body>
<div style=" text-align:center;">
<div style="height: 100px;margin-top: 200px;">
<button class="button1"><a id="myAnchor" href="https://www.cnblogs.com/du-hong/">北京-宏哥</a></button></br>
测试练习模态框的处理:<br><br>
1.警告框
<input class="button" type="button" id="input_1" value="点击弹出警告框"><br><br>
2.确认框
<input class="button" type="button" id="input_2" value="点击弹出确认框"><br><br>
3.提示框
<input class="button" type="button" id="input_3" value="点击弹出提示框"><br><br>
</div>
</div
</body>
</html>
浏览器打开页面如下图所示:

4.牛刀小试
下边宏哥就利用上边准备好的模态框例子进行一下演示。首先演示当监听器存在时,我们如何处理。
监听器存在
4.1代码设计

4.2参考代码
# coding=utf-8 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 # 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-14
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-15-处理模态对话框弹窗
''' # 3.导入模块
from playwright.sync_api import sync_playwright def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
page.goto("C:/Users/DELL/Desktop/test/ModalDialogueBox.html")
page.on("dialog", lambda dialog: dialog.accept())
page.on("dialog", lambda dialog: print(dialog.message))
# 点击弹出警告框
page.locator("#input_1").click()
# 点击弹出警告框
page.wait_for_timeout(5000)
page.locator("#input_2").click()
# 点击弹出警告框
page.wait_for_timeout(5000)
page.locator("#input_3").click()
browser.close() with sync_playwright() as playwright:
run(playwright)
4.3运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

监听器不存在
4.4代码设计

4.5参考代码
# coding=utf-8 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 # 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-14
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-15-处理模态对话框弹窗
''' # 3.导入模块
from playwright.sync_api import sync_playwright def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
page.goto("C:/Users/DELL/Desktop/test/ModalDialogueBox.html")
# page.on("dialog", lambda dialog: dialog.accept())
# page.on("dialog", lambda dialog: print(dialog.message))
# 点击弹出警告框
page.locator("#input_1").click()
# 点击弹出警告框
page.wait_for_timeout(5000)
page.locator("#input_2").click()
# 点击弹出警告框
page.wait_for_timeout(5000)
page.locator("#input_3").click()
browser.close() with sync_playwright() as playwright:
run(playwright)
4.6运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

5.项目实战
宏哥继续用java+selenium中的一个alert例子(http://news.cyol.com/node_60799.htm),只有点击确定这个按钮,alert框才会消失。
5.1参考代码
# coding=utf-8 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 # 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-14
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-15-处理模态对话框弹窗
''' # 3.导入模块
from playwright.sync_api import sync_playwright def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
page.on("dialog", lambda dialog: dialog.accept())
page.on("dialog", lambda dialog: print(dialog.message))
page.goto("http://news.cyol.com/node_60799.htm")
browser.close() with sync_playwright() as playwright:
run(playwright)
5.2运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

6.小结
page.on(“dialog”)监听器必须处理该对话框。否则您的操作将停止,无论是 locator.click() 还是其他内容。这是因为Web中的对话框是模态,因此在处理它们之前会阻止进一步的页面执行。
例如下边宏哥演示的是:只打印message,而没有处理就会一直卡在那个弹出框不继续往下操作了。宏哥就是将处理代码注释,打印代码留下。不过这种情况你手动点击“确定”,代码也是可以向下执行的。
# page.on("dialog", lambda dialog: dialog.accept())
page.on("dialog", lambda dialog: print(dialog.message))
运行代码后电脑端的浏览器的动作(可以看到卡主不动了,也就是代码不向下执行了)。如下图所示:

好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。
《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗的更多相关文章
- 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)
1.简介 在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题.很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭, ...
- Flutter 即学即用系列博客——04 Flutter UI 初窥
前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...
- Spark系列-初体验(数据准备篇)
Spark系列-初体验(数据准备篇) Spark系列-核心概念 在Spark体验开始前需要准备环境和数据,环境的准备可以自己按照Spark官方文档安装.笔者选择使用CDH集群安装,可以参考笔者之前的文 ...
- Python系列之入门篇——HDFS
Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...
- Python系列之入门篇——MYSQL
Python系列之入门篇--MYSQL 简介 python提供了两种mysql api, 一是MySQL-python(不支持python3),二是PyMYSQL(支持python2和python3) ...
- python爬虫 scrapy2_初窥Scrapy
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- WWDC15 Session笔记 - Xcode 7 UI 测试初窥
https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...
- Scrapy001-框架初窥
Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...
- 初窥Kaggle竞赛
初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...
- scrapy2_初窥Scrapy
递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...
随机推荐
- 技术招聘漫谈 | 正在招Golang工程师的你,赶快收藏这份识人秘籍!
各位技术面试官,欢迎来到新一期的技术招聘漫谈专栏. 在前两期的专栏中,我们解析了前端工程师以及 Java 工程师 这两个常见技术岗位的招聘技巧. 今天,我们想把目光聚焦在一个前景与"钱&qu ...
- RESTful API 简介
RESTful API 简介 想必使用过 PHP.JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务 ...
- 在树莓派上实现numpy的LSTM长短期记忆神经网络做图像分类,加载pytorch的模型参数,推理mnist手写数字识别
这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是LSTM识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: import torch imp ...
- STM32F429 Discovery开发板应用:实现SPI-SD Card文件写入(搭载FatFS文件系统)
MCU:STM32F429ZIT6 开发环境:STM32CubeMX+MDK5 外购了一个SPI接口的SD Card模块,想要实现SD卡存储数据的功能. 首先需要打开STM32CubeMX工具.输入开 ...
- SpringBoot集成支付宝 - 少走弯路就看这篇
最近在做一个网站,后端采用了SpringBoot,需要集成支付宝进行线上支付,在这个过程中研究了大量支付宝的集成资料,也走了一些弯路,现在总结出来,相信你读完也能轻松集成支付宝支付. 在开始集成支付宝 ...
- Transformer算法的应用
目录 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍 2.3. 相关技术比较 3. 实现步骤与流程 3.1. 准备工作:环境配置与依赖安装 3.2. 核心模块实现 4 ...
- FreeFileSync结合任务计划实现T级数据的全量备份和每日十几G数据的增量自动备份
1. 背景 公司现有nas存储中有共计1.8T左右的文件数据(一般是pdf.excel.图片.压缩文件等等格式),因为nas无法做备份:担心后面nas出现故障造成数据丢失,现急需一个解决方案实现如下目 ...
- PHP正则按照从大到小的SIGN签名算法
<?php/** * 签名算法 * @param unknown $key_id S_KEY(商户KEY) * @param unknown $array 例子:$array = array(' ...
- CF1829H Don't Blame Me题解
题意: 给定一个长度为 \(n\) 的数组,选择它的一个子序列(不一定要连续的),问有多少种选法使得它们 AND 的值的二进制表示法中有 \(k\) 个 \(1\). 思路: 这个题就是一个简单的 D ...
- Acunetix使用说明
简述 Acunetix是一种应用安全性扫描工具,旨在帮助发现和修复Web应用程序中的漏洞和安全风险. Acunetix可以发现以下一些常见的安全问题: 跨站脚本攻击(XSS):通过在网页中注入恶意脚本 ...