美文网首页
Playwright 学习笔记 2:断言 Assertions

Playwright 学习笔记 2:断言 Assertions

作者: kevinjaw007 | 来源:发表于2024-03-25 09:15 被阅读0次

    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,'',undefinedNaN
    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,'',undefinedNaN
    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() 匹配除nullundefined之外一切
    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
    });
    

    expect.extend自定义匹配函数

    mergeExpectsmergeTests合并多个测试匹配模块

    相关文章

      网友评论

          本文标题:Playwright 学习笔记 2:断言 Assertions

          本文链接:https://www.haomeiwen.com/subject/bnedtjtx.html