Playwright由Microsoft创建,是一个开放源代码浏览器自动化框架,使JavaScript工程师可以在Chromium,Webkit和Firefox浏览器上测试其Web应用程序。
启动浏览器并导航到应用程序的URL
第一步是要声明您希望针对哪个浏览器引擎运行测试。同样,Playwright允许您针对Chromium,Firefox和Webkit运行测试。
如何针对chromium浏览器:
const { chromium } = require('playwright') |
默认情况下,Playwright以无头模式运行。如果您想在执行测试时实际看到浏览器,请在启动调用中将headless设置为false:
browser = await playwright.chromium.launch({headless: false}) |
接下来,为浏览器和页面对象声明变量。
const { chromium } = require('playwright') |
关于Playwright的重要注意事项是它们的所有API都是异步的,因此需要async / await来调用它们。因此,我利用这种模式来启动浏览器并初始化页面对象。
const { chromium } = require('playwright') |
现在有了页面对象,我可以使用page.goto()转到我的应用程序:
code => {
browser = await chromium.launch()
page = await browser.newPage()
await page.goto('https://automationbookstore.dev/')
})()[/code]
增加断言库
与其他许多自动测试工具一样,关于Playwright的重要注意事项是,它旨在自动执行浏览器交互,但是您必须使用断言工具 进行验证。 在本示例中,我将使用Mocha。
const { chromium } = require('playwright') |
我还将添加一个套件(使用'describe'),并将其中的Playwright调用移至before/after函数内。
const { chromium } = require('playwright') |
访问元素
在尝试新工具时,我想从一个非常简单的示例开始。基本上,Web测试自动化的“ Hello World”正在验证页面上的标题。因此,让我们从那里开始进行第一个测试!
Playwright提供了许多访问元素的方法, 包括典型的CSS和Xpath选择器。
检查此应用程序的DOM时,显示标题的元素的ID为'page-title',而我要验证的文本是此元素的内部文本。
<h1 id="page-title" class="ui-title" role="heading" aria-level="1">Automation Bookstore</h1> |
使用page.innerText获取CSS选择器ID为"#page-title"的值,断言它的结果。
it('should have title', async () => { |
就这样,我进行了第一次测试!
const { chromium } = require('playwright') |
如果希望输入搜索文字:
it('should return one book when exact title is given', async () => { |
视觉测试
Playwright提供了图像和视频捕获,但它更像是一种可视记录机制,不能在断言本身中使用。因此,我将使用适当的可视化测试断言库Applitools。
安装Applitools后,我指定第3行所需的Applitools类。
const { chromium } = require('playwright') |
我声明并初始化了“eyes”对象(第3行),该对象是进行视觉测试的API。
describe('Automation Bookstore', function () { |
然后使用视觉测试做一个测试。
it('should be visually perfect', async () => { |
跨平台测试
虽然Playwright提供了对Chromium,Webkit和Firefox的支持,但没有对Safari或IE的内置支持。
将Playwright与Applitools的Ultrafast Grid集成后,我现在可以对我的测试进行进一步的介绍了!
与上面使用Applitools Classic Runner相对,我将对其进行修改以使用Visual Grid Runner。在第5行上,请注意,我使用数字10。这表示我希望并行运行的测试数量,从而使运行速度更快!
const {VisualGridRunner, Eyes, Target, Configuration, RectangleSize, BatchInfo, BrowserType, DeviceName, ScreenOrientation} = require('@applitools/eyes-playwright') |
现在好了!我可以指定要使用的所有浏览器,设备和视口-为我的测试提供最终的跨平台覆盖。不仅要在功能上进行验证,而且还要在视觉上进行验证。
beforeEach(async () => { |
测试本身不需要更改,它们将自动在所有指定的配置中运行。