前言
playwright 提供了一个 expect方法 用于断言,还可以设置超时时间。
expect 使用
断言 |
描述 |
expect(locator).to_be_checked() |
Checkbox is checked |
expect(locator).to_be_disabled() |
Element is disabled |
expect(locator).to_be_editable() |
Element is enabled |
expect(locator).to_be_empty() |
Container is empty |
expect(locator).to_be_enabled() |
Element is enabled |
expect(locator).to_be_focused() |
Element is focused |
expect(locator).to_be_hidden() |
Element is not visible |
expect(locator).to_be_visible() |
Element is visible |
expect(locator).to_contain_text() |
Element contains text |
expect(locator).to_have_attribute() |
Element has a DOM attribute |
expect(locator).to_have_class() |
Element has a class property |
expect(locator).to_have_count() |
List has exact number of children |
expect(locator).to_have_css() |
Element has CSS property |
expect(locator).to_have_id() |
Element has an ID |
expect(locator).to_have_js_property() |
Element has a JavaScript property |
expect(locator).to_have_text() |
Element matches text |
expect(locator).to_have_value() |
Input has a value |
expect(locator).to_have_values() |
Select has options selected |
expect(page).to_have_title() |
Page has a title |
expect(page).to_have_url() |
Page has a URL |
expect(api_response).to_be_ok() |
Response has an OK status |
to_be_checked()使用示例
from playwright.sync_api import expect
locator = page.get_by_label("Subscribe to newsletter")
expect(locator).to_be_checked()
to_be_visible()使用示例
from playwright.sync_api import expect
locator = page.locator('.my-element')
expect(locator).to_be_visible()
设置超时
如下图中的提示语,点击按钮后,可能在1秒内就会出现提示框。
默认情况下,断言超时时间是5秒钟, 你也可以自定义超时时间.
from playwright.sync_api import expect
def test_foobar(page: Page) -> None:
# ......
expect(page.get_by_text("操作成功")).to_be_visible(timeout=3000)
在conftest.py 中设置全局 expect 超时
from playwright.sync_api import expect
expect.set_options(timeout=8000)
自定义异常消息
expect 中添加第二个参数,设置自定义报错消息内容
expect(page.get_by_text("Name"), "should be logged in").to_be_visible()
断言报错后显示
def test_foobar(page: Page) -> None:
> expect(page.get_by_text("Name"), "should be logged in").to_be_visible()
E AssertionError: should be logged in
E Actual value: None
E Call log:
E LocatorAssertions.to_be_visible with timeout 5000ms
E waiting for get_by_text("Name")
E waiting for get_by_text("Name")
tests/test_foobar.py:22: AssertionError