大家好,我是阿萨。 一个成功的自动化脚本离不开一个比较好的断言,我们学习了如何操作页面元素后,就需要学会如任何校验结果的正确性。今天阿萨带大家来学习断言的写法。
Playwright提供了web优先的断言,提供了创建断言的便捷方法,这些断言会等待并重试,直到满足预期的条件。
以下面一段代码为例:
from playwright.sync_api import Page, expectdef test_status_becomes_submitted(page: Page) -> None: # .. page.locator("#submit-button").click() expect(page.locator(".status")).to_have_text("Submitted")
Playwright 会不断重试直到 .status 的节点出现“Submitted” 这个文本。它会一遍又一遍的不断去获取元素, 检查是否满足条件,直到满足条件或者超时。 默认超时时间是5 秒。
Playwright 提供的常见的断言方法有如下类型
expect(locator).not_to_be_checked(**kwargs)expect(locator).not_to_be_disabled(**kwargs)expect(locator).not_to_be_editable(**kwargs)expect(locator).not_to_be_empty(**kwargs)expect(locator).not_to_be_enabled(**kwargs)expect(locator).not_to_be_focused(**kwargs)expect(locator).not_to_be_hidden(**kwargs)expect(locator).not_to_be_visible(**kwargs)expect(locator).not_to_contain_text(expected, **kwargs)expect(locator).not_to_have_attribute(name, value, **kwargs)expect(locator).not_to_have_class(expected, **kwargs)expect(locator).not_to_have_count(count, **kwargs)expect(locator).not_to_have_css(name, value, **kwargs)expect(locator).not_to_have_id(id, **kwargs)expect(locator).not_to_have_js_property(name, value, **kwargs)expect(locator).not_to_have_text(expected, **kwargs)expect(locator).not_to_have_value(value, **kwargs)expect(locator).not_to_have_values(values, **kwargs)expect(locator).to_be_checked(**kwargs)expect(locator).to_be_disabled(**kwargs)expect(locator).to_be_editable(**kwargs)expect(locator).to_be_empty(**kwargs)expect(locator).to_be_enabled(**kwargs)expect(locator).to_be_focused(**kwargs)expect(locator).to_be_hidden(**kwargs)expect(locator).to_be_visible(**kwargs)expect(locator).to_contain_text(expected, **kwargs)expect(locator).to_have_attribute(name, value, **kwargs)expect(locator).to_have_class(expected, **kwargs)expect(locator).to_have_count(count, **kwargs)expect(locator).to_have_css(name, value, **kwargs)expect(locator).to_have_id(id, **kwargs)expect(locator).to_have_js_property(name, value, **kwargs)expect(locator).to_have_text(expected, **kwargs)expect(locator).to_have_value(value, **kwargs)expect(locator).to_have_values(values, **kwargs)expect(page).not_to_have_title(title_or_reg_exp, **kwargs)expect(page).not_to_have_url(url_or_reg_exp, **kwargs)expect(page).to_have_title(title_or_reg_exp, **kwargs)expect(page).to_have_url(url_or_reg_exp, **kwargs)expect(api_response).not_to_be_ok()expect(api_response).to_be_ok()
比较简单的,我们就不展开了。重点说一些有特殊设置的。
expect(locator).to_contain_text(expected, **kwargs)
- expected 参数可以是string ,Pattern, list 等,正则表达式或者字符都接受。
- ignore_case 确认是否匹配大小写。
- timeout 超时时间。
- use_inner_text 是否使用 element.innerText 代替 element.textContent 。
如果传入一个数组作为期望值,则期望为:
- Locator解析为一个元素列表。
- 该列表子集中的元素分别包含预期数组中的文本。
- 匹配的元素子集的顺序与期望的数组相同。
- 期望数组中的每个文本值都与列表中的某个元素匹配。