PlayWright是什么?
PlayWright是微软开源的一个浏览器自动化工具,可为现代Web应用程序提供可靠的端到端测试
地址:官网
特点
- 单个API可自动执行Chromium,Firefox和WebKit。
- 支持语言:JavaScript&TypeScript,Python,C#和Java
- 自动下载Chromium,Firefox和WebKit,Selenium需要手动下载,且需要对应版本
- 支持无头浏览器模式,可在无头有头之间自由切换
- 可拦截网络请求与响应
- 单个浏览器实例可以创建多个隔离的浏览器上下文。每个浏览器上下文都可以运行多页仿真方案
- 可录制浏览器操作并自动生成代码
如何安装使用?
以JavaScript&TypeScript为例
安装
$ npm i -D playwright
或
yarn add --dev playwright
使用
const { chromium } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
await page.goto('https://playwright.dev/');
await page.screenshot({ path: `example.png` });
await browser.close();
})();
运行上面代码,会在当前目前生成example.png,该文件是playwright官网的截图
使用场景?
自动化测试
Playwright提供断言功能以及输入框输入,按钮点击等功能,如此便可进行自动化测试,例如:
登录github
const page = await context.newPage();
await page.goto('https://github.com/login');
// Interact with login form
await page.click('text=Login');
await page.fill('input[name="login"]', USERNAME);
await page.fill('input[name="password"]', PASSWORD);
await page.click('text=Submit');
// Verify app is logged in
断言
const content = await page.textContent('nav:first-child');
expect(content).toBe('home');
数据爬取
Playwright支持拦截网络请求和响应,且可以拿到实时渲染的页面元素,还可以无头模式运行,这使数据爬取工作的效率大幅提升,下面是一些例子:
有头模式
默认为无头模式运行,下述代码为有头模式运行
const { chromium } = require('playwright');
(async () => {
const browser = await webkit.launch({headless:false});
const page = await browser.newPage();
await page.goto('https://playwright.dev/');
await page.screenshot({ path: `example.png` });
await browser.close();
})();
拦截请求和响应
const { chromium, webkit, firefox } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
// Subscribe to 'request' and 'response' events.
page.on('request', request =>
console.log('>>', request.method(), request.url()));
page.on('response', response =>
console.log('<<', response.status(), response.url()));
await page.goto('https://example.com');
await browser.close();
})();
代理请求
const browser = await chromium.launch({
proxy: {
server: 'http://myproxy.com:3128',
user: 'usr',
password: 'pwd'
}
});
元素选择
单元素选择
const { chromium } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
await page.goto('https://playwright.dev/');
await page.$('title');
await browser.close();
})();
多元素选择
const { chromium } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
await page.goto('https://playwright.dev/');
await page.$$('title');
await browser.close();
})();
视频下载
Playwright还可以获取页面中的视频并下载,例子:
const context = await browser.newContext({ recordVideo: { dir: 'videos/' } });
// Make sure to await close, so that videos are saved.
await context.close();
总结
Playwright非常强大,可以说在使用性上碾压了Selenium,且官方支持了js,java,c#和python,入门极其简单,官方文档也十分齐全易懂,总之就是微软牛皮!