前言

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

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

文章转自:https://www.cnblogs.com/yoyoketang/p/17198224.html