python+playwright 学习-28 定位多个元素

前言

我们一般定位到页面上唯一的元素再进行操作,有时候一个元素的属性是一样的,会定位到多个元素

click方法

当定位到页面唯一元素的时候,可以调用click方法

   <div>
           <label>标签:
               <input type="checkbox" id="a1"> 旅游
               <input type="checkbox" id="a2">看书
               <input type="checkbox" id="a3" checked >学习
               <input type="checkbox" id="a4">学python
           </label>
       </div>

如果直接通过id定位到,可以直接调用click 方法

# 上海悠悠 wx:283340479  
# blog:https://www.cnblogs.com/yoyoketang/

  a1 = page.locator('#a1')
    print(a1)   # <Locator>
    a1.click()

如果通过type="checkbox" 属性定位,会定位到多个元素

a1 = page.locator('[type="checkbox"]')
    print(a1)   # <Locator>
    a1.click()

此时会抛出异常

playwright._impl._api_types.Error: Error: strict mode violation: locator("[type=\"checkbox\"]") resolved to 4 elements:
    1) <input id="a1" type="checkbox"/> aka get_by_label("标签:\n                旅游\n               看书\n               学习\n               学python")
    2) <input id="a2" type="checkbox"/> aka get_by_role("checkbox").nth(1)
    3) <input id="a3" checked type="checkbox"/> aka get_by_role("checkbox").nth(2)
    4) <input id="a4" type="checkbox"/> aka get_by_role("checkbox").nth(3)
=========================== logs ===========================
waiting for locator("[type=\"checkbox\"]")

在异常里面会非常清晰的看到,按给的定位方式有4个元素被定位到,所以不能直接调用click的方法

first 和 last

前面提到如果定位到多个元素,可以用first 和 last 取第一个和最后一个

a1 = page.locator('[type="checkbox"]')
    a1.first.click()  # 点第一个
    a1.last.click()   # 点最后个

nth() 根据索引定位

前面报错的时候会看到画面有 nth() 可以根据索引找到第几个元素

    2) <input id="a2" type="checkbox"/> aka get_by_role("checkbox").nth(1)
    3) <input id="a3" checked type="checkbox"/> aka get_by_role("checkbox").nth(2)
    4) <input id="a4" type="checkbox"/> aka get_by_role("checkbox").nth(3)

使用示例

 a1 = page.locator('[type="checkbox"]')
    a1.nth(0).click()
    a1.nth(3).click()

count 统计个数

使用count 可以统计元素的个数

    a1 = page.locator('[type="checkbox"]')
    print(a1.count())    # 4


2023最新《Playwright+Python自动化测试》点我 ->立即参与
联系微信:283340479

posted @   上海-悠悠  阅读(2724)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2022-03-09 python测试开发django-188.Bootstrap折叠(Collapse)插件
2019-03-09 python测试开发django-32.admin后台多对多关系ManyToManyField
2019-03-09 python测试开发django-31.admin后台一对多操作ForeignKey
2018-03-09 python接口自动化21-规范的API接口文档示例
2017-03-09 Selenium2+python自动化39-关于面试的题
点击右上角即可分享
微信分享提示