puppeteer自动化测试
1、基础知识
- puppeteer.launch() 创建浏览器实例
- puppeteer.newPage() 创建一个新页面
- puppeteer.goto() 进入指定网站
- page.screenshot() 截屏
- page.pdf() 输出为pdf 注意必须是headless=true
- page.evaluate() 在浏览器中执行函数想到与在控制台执行函数 返回promise
- page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]]) 等待 可以是等待一段时间,某个函数执行或某个DOM的出现
- page.click(selector[, options]) 点击某个元素
- page.type(selector, text[, options]) 文本输入
- page.frames() 获取当前页面所有的 iframe,然后根据 iframe 的名字精确获取某个想要的 iframe
- iframe.$(‘.srchsongst‘) 获取 iframe 中的某个元素
- iframe.evaluate() 在浏览器中执行函数,相当于在控制台中执行函数,返回一个 Promise
- Array.from 将类数组对象转化为对象
- iframe.$eval() 相当于在 iframe 中运行 document.queryselector 获取指定元素,并将其作为第一个参数传递
- iframe.$$eval 相当于在 iframe 中运行 document.querySelectorAll 获取指定元素数组,并将其作为第一个参数传递
-
page.emulate() 指定设备
2、配置文件
jest.config.js module.exports = { preset: 'jest-puppeteer', //调用preset // globals: _.assign({}, config.get('e2e'), { //这里可以注入全局变量 // ENV_URL: config.get('baseUrl') // }), testMatch: ['**/test/*.test.js?(x)'] //指定需要进行测试的文件 }
jest-puppeteer.config.js const port = process.env.TEST_SERVER_PORT ? Number(process.env.TEST_SERVER_PORT) : 4444 // console.log(port) process.env.TEST_SERVER_PORT = port module.exports = {
exitOnPageError: false,//false忽略错误,true捕获错误(default)
launch: { headless: process.env.CI === 'true', }, browserContext: process.env.INCOGNITO ? 'incognito' : 'default', server: { command: `cross-env PORT=${port} node test`, port, launchTimeout: 100000, }, }
命令行 npm run test "test": "cross-env INCOGNITO=true jest -c jest.config.js --notify --detectOpenHandles",
3、服务文件/test/index.js(static即测试文件)
const path = require('path') const express = require('express') const app = express() app.use(express.static(path.join(__dirname, 'static'))) console.log(process.env.PORT) app.listen(process.env.PORT)
参考文章
https://jestjs.io/docs/en/using-matchers
你要觉得这篇文章比较好,记得点推荐!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通