Playwright 学习笔记 2:断言 Assertions
断言 Assertions
expect(value).<匹配器>
例如:expect(success).toBeTruthy()
自动重试断言 Auto-retrying Assertions
这类断言会一直重试到测试通过或是超时。
断言 | 描述 |
---|---|
await expect(locator).toBeAttached() |
元素已加载到DOM结构 |
await expect(locator).toBeChecked() |
选项已勾选 |
await expect(locator).toBeDisabled() |
元素已无效 |
await expect(locator).toBeEditable() |
元素可编辑 |
await expect(locator).toBeEmpty() |
容器是空的 |
await expect(locator).toBeEnabled() |
元素已启用 |
await expect(locator).toBeFocused() |
元素已获取焦点 |
await expect(locator).toBeHidden() |
元素不可见 |
await expect(locator).toBeInViewport() |
元素出现在可视窗口中 |
await expect(locator).toBeVisible() |
元素可见 |
await expect(locator).toContainText() |
元素内包含文字 |
await expect(locator).toHaveAttribute() |
元素属性 |
await expect(locator).toHaveClass() |
元素class |
await expect(locator).toHaveCount() |
列表元素具有对应数量的子元素 |
await expect(locator).toHaveCSS() |
元素有CSS属性 |
await expect(locator).toHaveId() |
元素ID |
await expect(locator).toHaveJSProperty() |
元素特定JS属性 |
await expect(locator).toHaveScreenshot() |
比较元素的屏幕截图是否一致 |
await expect(locator).toHaveText() |
元素内文字 |
await expect(locator).toHaveValue() |
输入框内有值 |
await expect(locator).toHaveValues() |
多选框有值 |
await expect(page).toHaveScreenshot() |
比较屏幕截图是否一致 |
await expect(page).toHaveTitle() |
页面的title |
await expect(page).toHaveURL() |
页面URL |
await expect(response).toBeOK() |
API响应状态码在200~299之间 |
非重试断言 Non-retrying Assertions
断言 | 描述 |
---|---|
expect(value).toBe() |
值相同 |
expect(value).toBeCloseTo() |
浮点数近似相等 |
expect(value).toBeDefined() |
值不是 undefined
|
expect(value).toBeFalsy() |
值为 false , 0 , null ,'' ,undefined 或NaN
|
expect(value).toBeGreaterThan() |
整数值大于 |
expect(value).toBeGreaterThanOrEqual() |
整数值大于等于 |
expect(value).toBeInstanceOf() |
对象是某个类的实例 |
expect(value).toBeLessThan() |
整数值小于 |
expect(value).toBeLessThanOrEqual() |
整数值小于等于 |
expect(value).toBeNaN() |
值为NaN
|
expect(value).toBeNull() |
值为null
|
expect(value).toBeTruthy() |
值不为 false , 0 , null ,'' ,undefined 或NaN
|
expect(value).toBeUndefined() |
值为undefined
|
expect(value).toContain() |
字符串包含子串 |
expect(value).toContain() |
数组或元组包含子元素 |
expect(value).toContainEqual() |
数组或元组包含子元素 |
expect(value).toEqual() |
值相等 |
expect(value).toHaveLength() |
数组或字符串长度为 |
expect(value).toHaveProperty() |
对象具有属性 |
expect(value).toMatch() |
字符串满足正则表达式 |
expect(value).toMatchObject() |
对象包含特定值 |
expect(value).toStrictEqual() |
值相同,数据类型也相同 |
expect(value).toThrow() |
函数报错 |
expect(value).any() |
匹配任意一种数据类型或类 |
expect(value).anything() |
匹配除null 和undefined 之外一切 |
expect(value).arrayContaining() |
数组包含特定元素 |
expect(value).closeTo() |
浮点数近似,优先用expect(value).toBeCloseTo()
|
expect(value).objectContaining() |
对象包含特定属性 |
expect(value).stringContaining() |
字符串包含特定子串 |
expect(value).stringMatching() |
字符串匹配正则 |
逆向匹配
一般在匹配函数前加.not
进行否定匹配。
expect(value).not.toEqual(0);
await expect(locator).not.toContainText('some text');
软断言 Soft Assertions
默认,失败的断言
会终止测试进程。失败的软断言
不会终止测试进程。
//将几处检查标记为失败也不会终止测试进程...
await expect.soft(page.getByTestId('status')).toHaveText('Success');
await expect.soft(page.getByTestId('eta')).toHaveText('1 day');
//...接着来测试检查更多的内容。
await page.getByRole('link',{name:'next page'}).click();
await expect.soft(page.getByRole('heading',{name:'Make another order'})).toBeVisible();
自定义断言期望信息
你可以在一个expect
中加入信息字段做为第二个参数。
await expect(page.getByText('Name'),'已成功登录').toBeVisible();
expect.poll
你可以采用expect.poll
将任何同步处理的expect
转化为异步处理。
await expect.poll(async () => {
const response = await page.request.get('https://api.example.com');
return response.status();
},{
//自定义期望信息
message:'确保API最终响应成功',
//持续重试10秒钟,默认为5秒
timeout: 10000,
}).toBe(200);
expect.toPass
你可以采用expect.toPass()
来重复执行一段代码,直到它测试通过。
await expect(async () => {
const response = await page.request.get('https://api.example.com');
expect(response.status()).toBe(200) ;
}).toPass({
//也可以设置请求间隔和持续时长
intervals:[1_000, 2_000, 10_000],
timeout: 60_000
});
网友评论