当前位置: 首页 > news >正文

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

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

等待事件

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

等待request

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

 ```pywith page.expect_request(\"http://example.com/resource\") as first:page.get_by_text(\"trigger request\").click()first_request = first.value# or with a lambdawith 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_playwrightdef 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_playwrightwith 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.lryc.cn/news/122464.html

相关文章:

  • 静态网页和动态网页区别
  • 美国服务器有哪些类型?
  • 【基因检测人工智能】如何使用JAVASCRIPT在HTML文档内部增加一个段落
  • unittest单元测试
  • 每天一道leetcode:72. 编辑距离(动态规划困难)
  • 详细介绍如何使用 OpenCV 对图像进行锐化
  • Java代理模式——静态代理与动态代理
  • Vue day02 Computed和Watch
  • 【Java】一只小菜坤的编程题之旅【3】
  • 全面掌握 Jaeger 分布式调用链路跟踪理论和实战,Go 为所有使用 go-resty 库发起 HTTP 请求集成链路跟踪 jaeger(附源码)
  • vue键盘和鼠标事件
  • Chrome 手动代理设置 HTTP/Socks5
  • SpringBoot第35讲:SpringBoot集成连接池 - 默认连接池HikariCP
  • 选择最适合自己的笔记本
  • 前端安全:探秘安全 HTTP 头的设置
  • python爬虫——爬虫伪装和反“反爬”
  • vue3 使用 element-china-area-data 实现地区选择器
  • STM32自带的DSP库的滤波初体验(一)
  • go kratos protobuf 接收动态JSON数据
  • Python学习笔记第五十四天(Pandas DataFrame)
  • Docker镜像查看下载删除镜像文件的相关命令
  • 1. VisionOS平台介绍
  • 【C#】设置有线网卡IP地址,子网掩码,网关,DNS
  • LVS-DR集群及NGINX负载均衡
  • React如何配置env环境变量
  • VR全景智慧文旅,用科技助力旅游业振兴
  • 系统架构设计专业技能 · 系统安全分析与设计(四)【加解密、数字信封、信息摘要、数字签名、数字书证、网络安全、信息安全】
  • 基于WebSocket的在线文字聊天室
  • VS Code中C++程序的调试(Debug)功能
  • C#四个字节十六进制与单精度浮点数互转