【playwright】新一代自动化测试神器playwright+python系列课程09_playwright元素定位_filter

locator.filter()过滤定位器

本文章向大家介绍playwright 中locator.filter()过滤定位器的使用,
locator.filter()方法可以对locator 定位到的元素进行筛选过滤,可以按文本过滤,也可以按locator定位器过滤。

locator.filter() 文本过滤

可以使用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()

实践代码:

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''

from playwright.sync_api import sync_playwright,Playwright,expect

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False,slow_mo=2000) # 设置有头模式启动chrome浏览器
    context = browser.new_context() # 创建上下文,打开浏览器
    page = context.new_page() # 打开标签页
    page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')
    page.locator('.form-control').and_(page.locator('[type="text"]')).fill('admin')
    page.locator('[type="password"]').fill('Deshifuzhi01')
    page.locator('#submit').click()
    # page.locator('a').filter(has_text='测试').click() #先定位页面上的所有超链接再过滤包含测试的元素
    page.locator('a').filter(has=page.get_by_text('测试',exact=True)).click()#先定位页面上的所有超链接再过滤包含测试的元素

    page.wait_for_timeout(10000)
    context.close()
    browser.close()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值