news 2026/6/9 16:57:35

playwright学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
playwright学习笔记

1. 安装 playwright

```bash # 默认安装所有浏览器驱动 # playwright浏览器安装在Windows系统的以下路径: # C:\Users\用户名\AppData\Local\ms-playwright npm install playwright ```

2. 编写第一个测试用例

```javascript const { test, expect } = require('@playwright/test'); test('第一个测试用例', async ({ page }) => { await page.goto('https://www.baidu.com'); await expect(page).toHaveTitle('百度一下,你就知道'); }); ```

3. 运行测试用例

```bash npx playwright test // 或者 # 测试文件位于e2e目录 # 在package.json中,test:e2e被映射为”playwright test“ # 实际执行: playwright test e2e/example.spec.ts npm run test:e2e ```

4. 断言

```javascript // 断言元素是否存在 await expect(page.locator('css=input[name="wd"]')).toBeVisible(); // 断言元素是否包含指定文本 await expect(page.locator('css=input[name="wd"]')).toContainText('百度一下'); ```

5. 元素操作

```javascript // 输入文本 await page.locator('css=input[name="wd"]').fill('Playwright'); // 点击元素 await page.locator('css=input[type="submit"]').click(); ```

6. 等待

```javascript // 等待元素可见 await page.locator('css=h1').waitFor({ state: 'visible' }); // 等待元素可点击 await page.locator('css=input[type="submit"]').waitFor({ state: 'enabled' }); ```

7. 处理弹窗

```javascript // 处理 alert 弹窗 await page.on('dialog', async dialog => { console.log(dialog.message()); await dialog.dismiss(); }); ```

8. 处理文件上传

```javascript // 上传文件 await page.locator('css=input[type="file"]').setInputFiles('path/to/file.txt'); ```

9. 处理 iframe

```javascript // 切换到 iframe await page.frameLocator('css=iframe[name="content"]').waitFor({ state: 'visible' }); // 在 iframe 中操作元素 await page.frameLocator('css=iframe[name="content"]').locator('css=input[name="wd"]').fill('Playwright'); ```

10. 处理多个浏览器窗口

```javascript // 打开新窗口 await page.locator('css=a[href="https://www.baidu.com"]').click({ target: 'blank' }); // 切换到新窗口 const newWindow = await page.waitForEvent('popup'); await newWindow.waitForLoadState(); // 断言新窗口标题 await expect(newWindow).toHaveTitle('百度一下,你就知道'); ```

11. 处理多个标签页

```javascript // 打开新标签页 await page.locator('css=a[href="https://www.baidu.com"]').click({ target: 'blank' }); // 切换到新标签页 const newPage = await page.waitForEvent('popup'); await newPage.waitForLoadState(); // 断言新标签页标题 await expect(newPage).toHaveTitle('百度一下,你就知道'); ```

12. 处理多个元素

```javascript // 断言多个元素是否存在 await expect(page.locator('css=input[name="wd"]')).toBeVisible(); // 断言多个元素是否包含指定文本 await expect(page.locator('css=input[name="wd"]')).toContainText('百度一下'); ```

13. 处理多个元素的断言

```javascript // 断言多个元素是否存在 await expect(page.locator('css=input[name="wd"]')).toBeVisible(); // 断言多个元素是否包含指定文本 await expect(page.locator('css=input[name="wd"]')).toContainText('百度一下'); ```

14. 处理多个元素的操作

```javascript // 输入文本 await page.locator('css=input[name="wd"]').fill('Playwright'); // 点击元素 await page.locator('css=input[type="submit"]').click(); ```

15. 处理多个元素的等待

```javascript // 等待多个元素可见 await page.locator('css=h1').waitFor({ state: 'visible' }); // 等待多个元素可点击 await page.locator('css=input[type="submit"]').waitFor({ state: 'enabled' }); ```

16. 处理多个元素的弹窗

```javascript // 处理 alert 弹窗 await page.on('dialog', async dialog => { console.log(dialog.message()); await dialog.dismiss(); }); ```

17. 处理多个元素的文件上传

```javascript // 上传文件 await page.locator('css=input[type="file"]').setInputFiles('path/to/file.txt'); ```

18. 处理多个元素的 iframe

```javascript // 切换到 iframe await page.frameLocator('css=iframe[name="content"]').waitFor({ state: 'visible' }); // 在 iframe 中操作元素 await page.frameLocator('css=iframe[name="content"]').locator('css=input[name="wd"]').fill('Playwright'); ```

19. 处理多个元素的多个浏览器窗口

```javascript // 打开新窗口 await page.locator('css=a[href="https://www.baidu.com"]').click({ target: 'blank' }); // 切换到新窗口 const newWindow = await page.waitForEvent('popup'); await newWindow.waitForLoadState(); // 断言新窗口标题 await expect(newWindow).toHaveTitle('百度一下,你就知道'); ```

20. 处理多个元素的多个标签页

```javascript // 打开新标签页 await page.locator('css=a[href="https://www.baidu.com"]').click({ target: 'blank' }); // 切换到新标签页 const newPage = await page.waitForEvent('popup'); await newPage.waitForLoadState(); // 断言新标签页标题 await expect(newPage).toHaveTitle('百度一下,你就知道'); ```
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 17:51:46

从零实现8位微控制器核心:VHDL项目完整示例

亲手造一颗CPU:用VHDL从零搭建8位微控制器核心你有没有想过,电脑里那颗飞速运转的“大脑”——CPU,到底是怎么工作的?它如何读懂一条条指令、完成加减运算、控制程序跳转?与其看别人画的框图猜来猜去,不如自…

作者头像 李华
网站建设 2026/5/30 17:51:44

26、深入了解 Windows 系统管理工具

深入了解 Windows 系统管理工具 1. 工具概述 在 Windows 系统管理中,有一系列实用的工具可以帮助我们完成各种任务,如管理文件、获取安全标识符、收集系统信息、终止进程、查看进程信息以及了解用户登录情况等。下面将详细介绍这些工具的功能和使用方法。 2. PsFile 2.1 …

作者头像 李华
网站建设 2026/5/30 17:51:43

29、VMMap:强大的内存分析工具使用指南

VMMap:强大的内存分析工具使用指南 1. VMMap的启动与追踪 VMMap在启动时会将一个DLL注入到目标进程中,并拦截其虚拟内存API调用。它会捕获内存分配的类型、大小、内存保护以及分配时的调用栈信息。在64位Windows系统中,VMMap可以对x86和x64程序进行检测和追踪,并相应地启…

作者头像 李华
网站建设 2026/5/30 17:51:41

34、SigCheck工具使用指南:文件扫描、签名验证与安全分析

SigCheck工具使用指南:文件扫描、签名验证与安全分析 1. 证书列表参数说明 SigCheck提供了一系列用于列出证书的参数,具体如下: | 参数 | 描述 | | — | — | | -t | 列出指定计算机证书存储中的证书(默认是所有计算机存储) | | -tu | 与 -t 相同,但列出用户证书存…

作者头像 李华
网站建设 2026/5/30 11:37:46

AI时代你不拥抱它,就得不到它的爱,信不信由你

AI时代你不拥抱它,就得不到它的爱,信不信由你 凌晨三点,你还在与一段顽固的代码搏斗,而隔壁工位的老王,早已用AI生成完整模块,正悠然地刷着短视频——这,就是拥抱与否的残酷分野。 一、幻想与现…

作者头像 李华