前言
locator.filter()方法可以对locator 定位到的元素进行筛选过滤,可以按文本过滤,也可以按locator定位器过滤。
locator.filter() 文本过滤
考虑以下 DOM 结构,我们要在其中单击第二张产品卡的购买按钮。我们有几个选项可以过滤定位器以获得正确的定位器。
可以使用locator.filter()方法按文本过滤定位器。它将在元素内部某处搜索特定字符串,可能在后代元素中不区分大小写。您还可以传递正则表达式。
page.get_by_role("listitem").filter(has_text="Product 2").get_by_role(
"button", name="Add to cart"
).click()
或者使用正则表达式
page.get_by_role("listitem").filter(has_text=re.compile("Product 2")).get_by_role(
"button", name="Add to cart"
).click()
按另一个 locator 过滤
定位器支持仅选择具有与另一个定位器匹配的后代的元素的选项。因此,您可以按任何其他定位器进行过滤,例如locator.get_by_role()、locator.get_by_test_id()、locator.get_by_text()等。
page.get_by_role("listitem").filter(
has=page.get_by_role("heading", name="Product 2")
).get_by_role("button", name="Add to cart").click()
我们还可以声明产品卡以确保只有一个
expect(
page.get_by_role("listitem").filter(
has=page.get_by_role("heading", name="Product 2")
)
).to_have_count(1)
请注意,内部定位器是从外部定位器开始匹配的,而不是从文档根目录开始。
链式定位器
您可以链接创建定位器的方法,例如page.get_by_text()或locator.get_by_role(),以将搜索范围缩小到页面的特定部分。
在此示例中,我们首先通过定位测试 ID 创建一个名为 product 的定位器。然后我们按文本过滤。我们可以再次使用产品定位器来获取按钮的角色并单击它,然后使用断言来确保只有一个产品带有文本“Product 2”。
product = page.get_by_role("listitem").filter(has_text="Product 2")
product.get_by_role("button", name="Add to cart").click()
标签:26,playwright,get,定位器,filter,locator,role,page
From: https://www.cnblogs.com/yoyoketang/p/17197625.html