第二十六节:动态id、class怎么定位

今天再给大家分享一个定位不到元素的原因——动态id。

没有打开新页面、没有alert、没有frame、加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个元素的id或者class等元素属性是动态生成的。代码执行时,元素的属性已经与之前不同,用之前的属性值去定位自然是定位不到的,会抛出NoSuchElementException。

那么,怎么判断元素属性是否是动态?很简单,一般看到元素属性里有拼接一串数字的,就很有可能是动态的。想要分辨,刷新一下浏览器再看该元素,属性值中的数字串改变了,即是动态属性了。

如下:

<div id="btn-attention_2030295">...</div>
 
 
  • 1

怎么定位这类型的元素呢?

1. 根据其他属性定位

如果有其他固定属性,最先考虑的当然是根据元素的其他属性来定位,定位方式那么多,何必在这一棵树上吊死。。

2. 根据相对关系定位

根据其附近的父节点、子节点、兄弟节点定位

3. 根据DOM顺序index定位

这个很简单,找到该元素在主文档或某级父节点中的index,然后根据index可轻松定位,不过这种方式可能不够稳定,如果可以,还是用其他的方法定位更加合适。

4. 根据部分元素属性定位

xpath中提供了三个非常好的方法来为我们定位部分属性值:

driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]")  # 这个需要结尾是‘btn-attention’
 
 
  • 1
  • 2
  • 3

contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

这里要多嘴一句,各种浏览器对xpath的支持情况不一样,像IE就差点,所以有时候会出现xpath在一个浏览器能定位到但在另一个浏览器定位不到的问题,不要惊讶。。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务描述 用C++编程 设计一个简单的学生类(Student) 学生类(Student): 公有数据成员:姓名(name),字符数组 公有数据成员:编号(id),整数类型,请借助totalCount自动计算学生的编号 私有数据成员:年龄(age),整数类型 静态数据成员:总人数(totalCount),整数类型,用于记录学生对象的总数 构造函数:只允许接受姓名和年龄作为参数,将其赋值给对应的成员变量,并将总人数加一 公有成员函数:displayInfo(),用于显示学生的姓名、年龄、编号和总人数,格式:name: Liam, age: 23, id: 1, totalCount: 1 要求: 输入格式:第一行输入一个整数k说明将有k个学生,第2到k+1行输入格式为:name age 输出格式:name: Liam, age: 23, id: 1, totalCount: 1 请注意每轮输入后需要将totalCount归零 题目确保姓名不会超过20个字,可以直接将name字符数组的长度设置为20,char* name = new char[20]; 样例输入: 5 Liam 23 Olivia 26 Noah 23 Emma 11 Oliver 12 样例输出: name: Liam, age: 23, id: 1, totalCount: 1 name: Olivia, age: 26, id: 2, totalCount: 2 name: Noah, age: 23, id: 3, totalCount: 3 name: Emma, age: 11, id: 4, totalCount: 4 name: Oliver, age: 12, id: 5, totalCount: 5 样例输入: 3 Ava 24 Elijah 12 Isabella 19 样例输出: name: Ava, age: 24, id: 1, totalCount: 1 name: Elijah, age: 12, id: 2, totalCount: 2 name: Isabella, age: 19, id: 3, totalCount: 3 样例输入: 4 Lucas 22 Sophia 24 Mason 12 Mia 29 样例输出: name: Lucas, age: 22, id: 1, totalCount: 1 name: Sophia, age: 24, id: 2, totalCount: 2 name: Mason, age: 12, id: 3, totalCount: 3 name: Mia, age: 29, id: 4, totalCount: 4
05-26

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值