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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用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-关于面试的题