20人参与 • 2026-01-23 • 软件测试
在编写测试时,我们使用assert语句来断言一段条件并以此为基础条件,我们要么通过测试,要么不通过测试。playwright给我们提供了另一个api,可以以一种更易读的方式用来执行相同的判断。
from playwright.sync_api import page, expect
docs_url = "https://playwright.dev/python/docs/intro"
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
link = page.get_by_role("link", name="get started")
link.click()
# page assertions
# assert page.url == docs_url
expect(page).to_have_url(docs_url)
expect(page).to_have_title("installation | playwright python")
run:

from playwright.sync_api import page, expect
docs_url = "https://playwright.dev/python/docs/intro"
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
link = page.get_by_role("link", name="get started")
# not exist in ui
link_not = page.get_by_role("link", name="get python")
expect(link).to_be_visible()
expect(link).to_be_enabled()
expect(link_not).not_to_be_visible()
expect(link_not).to_be_hidden()
link.click()
run:

注意,link_not 在页面上不存在,如果使用expect(link_not ).to_be_visible(),报错如下:


from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
heading = page.locator("h1.hero__title")
# inner text assertions
expect(heading).to_contain_text("testing")
expect(heading).to_have_text(("playwright enables reliable end-to-end testing for modern web apps."))

from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
dropdown_menu = page.locator("ul.dropdown__menu")
# inner text assertions
expect(dropdown_menu).to_contain_text("python")
expect(dropdown_menu).to_contain_text("java")
expect(dropdown_menu).to_contain_text("node.js")
expect(dropdown_menu).to_contain_text(".net")
run all:


from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
docs_link = page.get_by_role("link", name="docs")
expect(docs_link).to_have_class("navbar__item navbar__link")
run:

如果只想check或expect一个元素的一个class,则必须使用正则表达式。
如果还是使用上面的写法,修改为expect(docs_link).to_have_class("navbar__link")
run:

所以,正确的写法如下:
import re
from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
docs_link = page.get_by_role("link", name="docs")
expect(docs_link).to_have_class(
re.compile(r"navbar__link")
)
现在可以在这个模式中使用所有的正则表达式语法。
假设这个类应该从navbar __item开始,那我们的写法应为:re.compile(r"^navbar__item")
我们也可以expect元素id:expect(docs_link).to_have_id("playwright")。
from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
docs_link = page.get_by_role("link", name="docs")
expect(docs_link).to_have_attribute(
"href", "/python/docs/intro"
)


from playwright.sync_api import page, expect
def test_get_started_link(page: page):
page.goto("https://playwright.dev/python")
input = page.get_by_placeholder("search docs")
# input is hidden before button click
expect(input).to_be_hidden()
# search button
search_button = page.get_by_role("button", name="search")
search_button.click()
# should pop the search menu
expect(input).to_be_editable()
expect(input).to_be_empty()
# type some query in the input
query = "assertions"
input.fill(query)
# check input value
expect(input).to_have_value(query)
run:


from playwright.sync_api import page, expect
def test_app(page: page):
page.goto("https://bootswatch.com/default/")
checked_checkbox = page.get_by_label("checked checkbox")
default_checkbox = page.get_by_label("default checkbox")
expect(checked_checkbox).to_be_checked()
expect(default_checkbox).not_to_be_checked()

from playwright.sync_api import page, expect
def test_app(page: page):
page.goto("https://bootswatch.com/default/")
option_menu = page.get_by_label("example select")
expect(option_menu).to_have_value("1")
multi_option_menu = page.get_by_label("example multiple select")
multi_option_menu.select_option(["2", "4"])
expect(multi_option_menu).to_have_values(["2", "4"])
到此这篇关于playwright中assertions断言的方法实现的文章就介绍到这了,更多相关playwright assertions断言内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论