Playwright的断言功能是专门为动态Web设计的。它会自动重试,直到满足所需条件。Playwright具有内置的自动等待功能,意味着它会在执行操作之前等待元素可操作。Playwright提供了expect
函数用于编写断言。
请看下面的示例测试,了解如何使用定位器和基于Web的断言编写测试。
import re
from playwright.sync_api import Page, expect
def test_homepage_has_Playwright_in_title_and_get_started_link_linking_to_the_intro_page(page: Page):
page.goto("https://playwright.dev/")
# 期望标题中包含某个子字符串。
expect(page).to_have_title(re.compile("Playwright"))
# 创建一个定位器。
get_started = page.get_by_role("link", name="Get started")
# 期望某个属性与特定值“严格相等”。
expect(get_started).to_have_attribute("href", "/docs/intro")
# 点击“Get started”链接。
get_started.click()
# 期望URL包含“intro”。
expect(page).to_have_url(re.compile(".*intro"))
断言
Playwright提供了expect
函数,该函数会等待直到满足预期条件。
import re
from playwright.sync_api import expect
expect(page).to_have_title(re.compile("Playwright"))
定位器
定位器是Playwright的自动等待和重试的核心组件。定位器用于在任何时候查找页面上的元素,并用于对元素执行操作,例如.click
、.fill
等。
from playwright.sync_api import expect
get_started = page.get_by_role("link", name="Get started")
expect(get_started).to_have_attribute("href", "/docs/installation")
get_started.click()
测试隔离
Playwright的Pytest插件基于测试夹具的概念,其中包括内置的page
夹具,该夹具会传递给您的测试函数。由于浏览器上下文(Browser Context)的存在,每个测试之间的页面是隔离的。也就是说,每个测试都会在一个全新的浏览器环境中运行,即使多个测试在同一个浏览器中执行。
from playwright.sync_api import Page
def test_basic_test(page: Page):
# ...
使用测试钩子
您可以使用各种夹具在测试之前或之后执行代码,并在测试之间共享对象。一个具有函数作用域的夹具(例如before_each_after_each
)使用autouse
参数时的行为类似于beforeEach/afterEach
。而一个具有模块作用域的夹具,使用autouse
参数时的行为类似于beforeAll/afterAll
,它会在所有测试之前和之后运行。
import pytest
from playwright.sync_api import Page
@pytest.fixture(scope="function
", autouse=True)
def before_each_after_each(page: Page):
print("beforeEach")
# 在每个测试之前导航到起始URL。
page.goto("https://playwright.dev/")
yield
print("afterEach")
def test_main_navigation(page: Page):
# 使用`expect`API进行断言。
expect(page).to_have_url("https://playwright.dev/")
请注意,这只是一个简单的示例,您可以根据实际需要编写更复杂的测试用例。