「自动化测试」playwright中 expect 断言搭配 await 的使用事项
第一个参数建议两种用法,第一种是传递,第二种是传递基础数据类型值除了前面两个用法还可以传递( , ),但是暂时用不上,建议先优先以前两种用法为主在中的使用第一种,传递了的情况此时返回的对象会附加的拓展方法,可以使用 Assertions上的拓展方法,并且返回的是对象,故需要在前加上来配合使用第二种,传递了的情况此时返回的对象基本含有的方法,不含拓展的方法,并且返回的基本都是,所以一般不需要在前加上
判断 await 是否需要添加到 expect 前
expect
第一个参数建议两种用法,第一种是传递 locator
,第二种是传递基础数据类型值
除了前面两个用法还可以传递( Page
,APIResponse
),但是暂时用不上,建议先优先以前两种用法为主
await
在 expect
中的使用
第一种,传递了 locator
的情况
此时 expect
返回的对象会附加 playwright
的拓展方法 ExtraLocatorMatchers
,可以使用 Assertions上的拓展方法,并且返回的是 Promise
对象,故需要在前加上 await
来配合使用
// 此处 toBeVisible 返回的是 Promise 需配合 await 使用
public async assertLoginFail () {
await expect(this.page.locator('.error-msg'), '账号或密码输入错误,对应错误提示没有被正常展示').toBeVisible();
}
第二种,传递了 基础数值
的情况
此时 expect
返回的对象基本含有 jest
的方法,不含 playwright
拓展的方法,并且返回的基本都是 void
,所以一般不需要在前加上 await
来使用
// 从响应正文的 JSON 中获取 code
const { code } = await Response.json();
// 此处 toBe 无返回值,所以不需要加 await 使用
expect(code, '告警详情数据请求失败').toBe(0);
注意:
在值断言中,
expect
第一个参数可以接受Promise
与非Promise
对象的数值,对于传递的Promise
对象,会自动等待其状态变换后的结果进行判断,但是为了避免Promise
等待状态变换的过程中,expect
等待超时,导致结果误判,进而影响测试结果,所以建议统一将Promise
提出,在外等待其结果返回后再进行断言// expect 对于数值的判断(错误的做法) expect(customerCountLocator.innerText(), '客户数不能为0').not.toBe('0'); // 正确的做法 const customerCountInnerText = await customerCountLocator.innerText(); expect(customerCountInnerText, '客户数不能为0').not.toBe('0');
更多推荐
所有评论(0)