最强自动化测试框架Playwright(19)- 事件

news2024/11/22 16:32:40

Playwright允许收听网页上发生的各种类型的事件,例如网络请求,创建子页面,专用工作人员等。有几种方法可以订阅此类事件,例如等待事件或添加或删除事件侦听器。

等待事件

大多数情况下,脚本需要等待特定事件的发生。下面是一些典型的事件等待模式。

等待request

使用 page.expect_request() 等待具有指定 url 的请求

 ```py
        with page.expect_request(\"http://example.com/resource\") as first:
            page.get_by_text(\"trigger request\").click()
        first_request = first.value

        # or with a lambda
        with page.expect_request(lambda request: request.url == \"http://example.com\" and request.method == \"get\") as second:
            page.get_by_text(\"trigger request\").click()
        second_request = second.value
        ```

 点击元素,预期request的url是某个url

等待弹出窗口

with page.expect_popup() as popup:
  page.get_by_text("open the popup").click()
popup.value.goto("https://wikipedia.org") 

 监听页面事件

  def print_request_sent(request):
        print("Request sent: " + request.url)


    def print_request_finished(request):
        print("Request finished: " + request.url)


    page.on("request", print_request_sent)
    page.on("requestfinished", print_request_finished)
    page.goto("http://www.baidu.com")

可以看到监听到了发出请求和请求完成。 

示例:

from playwright.sync_api import Playwright, sync_playwright

def main(playwright: Playwright) -> None:
    # 启动浏览器和页面
    browser = playwright.chromium.launch()
    page = browser.new_page()

    # 监听新页面打开事件
    def on_page(page):
        print(f"A new page was opened: {page.url}")
        page.close()

    page.on("popup", on_page)
    
    # 打开新页面并等待
    page.goto("https://example.com")
    page.click("a[target='_blank']")
    page.wait_for_selector("#newpage")

    # 关闭浏览器
    browser.close()

with sync_playwright() as playwright:
    main(playwright)

在上面的例子中,使用了playwright的chromium驱动程序启动了浏览器,并创建了一个新页面。然后,使用page.on来监听新页面打开事件。当新页面被打开时,on_page函数会被调用,并输出新页面的URL。最后,我们在页面上单击一个链接,等待新页面打开并关闭浏览器。 

 一次性监听特定事件

page.once可以用于监听一次事件,当事件被触发时,执行回调函数并自动注销事件监听器。

once函数第一个参数为event,第二个参数为一个回调函数。

def once(self, event: str, f: typing.Callable[..., None]) -> None:
    return super().once(event=event, f=f)

page.once("dialog", lambda dialog: dialog.accept("2021"))
page.evaluate("prompt('Enter a number:')")

示例:

from playwright.sync_api import Playwright, sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()

    def on_load():
        print(page.title())

    page.once("load", on_load)
    page.goto("https://example.com")

    browser.close()

在上述示例代码中,使用了page.once函数来监听页面的load事件,当事件触发时,会执行on_load函数并输出页面的标题。由于使用了page.once函数,因此事件监听器只会在事件被触发一次后自动注销,不会造成内存泄漏问题。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实训一 :Linux的启动、关机及登录

实训一 :Linux的启动、关机及登录 2017 年 2 月 22 日 今日公布 实训目标 完成本次实训,将能够: 描述Linux的开机过程。在图形模式和文本模式下登录Linux。关闭和重启Linux 实训准备 一台已安装RHEL6的虚拟计算机,Linux虚拟…

【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】

目录 1、 Frmebuffer(帧缓冲)操作介绍1.1 显示设备的抽象1.2 内存映像1.3 输出画面数据1.4 用户态下操作屏显1.4.1 用文件I / O 操作屏显1.4.2 mmap() 函数1.4.3 ioctl()函数1.4.5 用命令操作屏1.4.6 测试程序 2、Framebuffer总体框架2.1 框架要点2.2 fbmem.c分析2.…

中小企业项目管理软件推荐:选择适合的工具提升项目效率!

中小企业项目管理软件有哪些?Zoho Projects是一款好用无广告的项目管理软件。当个小创业者是真的不容易,不仅要管理团队,还要管理团队项目。很多团队之前用了好多项目管理的软件,但是都不太满意。但是如果你经常参加创业者聚会上&…

安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda,只安装这一个就好,以免报错安装失败。 3、验证…

泰卦-地天卦

前言:否极泰来,但在易经里是泰卦在前,让我们分析下在否所期待否极后的泰卦是什么样的?本篇博客分析泰卦的卦辞和爻辞。 卦辞 小往大来,吉,亨。 篆曰:泰,小往大来,吉亨。…

7-8 计算存款利息

本题目要求计算存款利息,计算公式为interestmoney(1rate)year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。 输入格式: 输入在一行中…

035_小驰私房菜_Qualcomm账号注册以及提case流程

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 一、账号注册 1)登陆高通网站Wireless Technology & Innovation | Mobile Technology | Qualcomm, 采用…

Ceph Reef版本 RBD 性能测试:80万写IOPS(10节点、60个NVMe SSD)

2023-05-16 08:30 发表于上海 摘自:https://mp.weixin.qq.com/s/mKkPElmCktoZaRk0m0IbqA 1、背景 Ceph 社区最近冻结了即将发布的 Ceph Reef 版本,今天我们研究一下 Ceph Reef 版本在 10 个节点、60 个 NVMe 磁盘的集群上的 RBD 性能。 在确保硬件没有…

16收16发ARINC429模块

6通道发送, 16通道接收 发送通道: 每路发送通道FIFO大小为:511 x 32bit(CHR32216/32316) ,缓存256条发送消息(CHR32216-EX/32316-EX) 发送FIFO可设置复位 可设置消息间隔, 字间隔和发送帧的预定数呈 发送波特率100Kbps、50Kbps、…

春秋云镜 CVE-2020-0784

春秋云镜 CVE-2020-0784 wordpress插件 Title Experiments Free < 9.0.1 SQLI 靶标介绍 wordpress插件 Title Experiments Free < 9.0.1 没有对用户输入进行过滤和转义&#xff0c;导致了SQL注入。 启动场景 漏洞利用 exp POST /wp-admin/admin-ajax.php HTTP/1.1 H…

NeuralNLP-NeuralClassifier的使用记录(二),训练预测自己的【中文文本多分类】

NeuralNLP-NeuralClassifier的使用记录&#xff0c;训练预测自己的【中文文本多分类】 数据准备&#xff1a; ​ 与英文的训练预测一致&#xff0c;都使用相同的数据格式&#xff0c;将数据通过代码处理为JSON格式&#xff0c;以下是我使用的一种&#xff0c;不同的原数据情况…

关于配电室升级为智能运维模式的问题

配电室安全稳定运行、电能使用高效节能是每个企业关注的问题&#xff0c;然而&#xff0c;由于供用电系统的运行维护又是一项复杂而且专业性很强的工程&#xff0c;如果没有先进的技术手段&#xff0c;靠人工值班、人工操作的运行方式&#xff0c;运行管理成本大&#xff0c;安…

【什么是摆线减速器?设计、3D 打印和测试】

【什么是摆线减速器&#xff1f;设计、3D 打印和测试】 1. 什么是摆线驱动&#xff1f;2. 如何设计摆线驱动器3. DIY摆线驱动3D模型4. 三维设计5. 3D打印制造6. 组装摆线齿轮箱7. 测试摆线驱动器 在本教程中&#xff0c;我们将学习什么是摆线驱动器&#xff0c;它是如何工作的&…

React Native 图片组件基础知识

在 React Native 中使用图片其实跟 HTML 中使用图片一样简单&#xff0c;在 React Native 中我们使用Image组件来呈现图片的内容&#xff0c;其中主要的属性有&#xff1a;source。这个属性主要是设置图片的内容&#xff0c;它可以是网络图像地址、静态资源、临时本地图像以及本…

电气测试相关

项目&#xff1a; 长期过电压 瞬态过电压 瞬态欠压 跳跃启动 卸载 纹波电压 电源电压缓慢下降和上升 电源电压缓慢下降、快速上升 复位行为 短暂中断 启动脉冲 带电气系统控制的电压曲线 引脚中断 连接器中断 反极性 信号线和负载电路短路 启动行为 对分流不…

【数据结构系列】链表

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

谈谈我的感受

虽然清楚知识需要靠时间沉淀&#xff0c;但在看到自己做不出来的题别人会做&#xff0c;自己写不出的代码别人会写时还是会感到焦虑怎么办&#xff1f; 感受 当我们比别人弱的时候&#xff0c;可能会感到挫败、失落、沮丧或无力。这种感受往往是因为我们与自己设定的标准或别人…

RocketMQ 5.1.0 源码详解 | Producer 发送流程

文章目录 初始化DefaultMQProducer实例发送流程DefaultMQProducer#sendDefaultMQProducerImpl#sendMQClientInstance#updateTopicRouteInfoFromNameServer使用特定 topic 获取路由信息使用默认 topic 获取路由信息 DefaultMQProducerImpl#sendDefaultImpl发送流程总结 初始化De…

[保研/考研机试] KY26 10进制 VS 2进制 清华大学复试上机题 C++实现

题目链接&#xff1a; 10进制 VS 2进制http://www.nowcoder.com/share/jump/437195121691738172415 描述 对于一个十进制数A&#xff0c;将A转换为二进制数&#xff0c;然后按位逆序排列&#xff0c;再转换为十进制数B&#xff0c;我们称B为A的二进制逆序数。 例如对于十进制…

2023年国赛数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…