丢掉Selenium吧,一起玩玩Playwright

6,475 阅读1分钟

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,入门极其简单,官方文档也十分齐全易懂,总之就是微软牛皮!