Selenium定位class包含空格的元素-复合class节点

文章介绍了HTML中的class属性及其在Selenium中的使用,特别是find_element_by_class_name方法。讲解了class_name如何对应HTML元素的多个类名,并提供了通过class_name、XPath和CSSselector定位元素的示例。同时,文章解释了StaleElementReferenceException错误的原因,即页面更新后需重新定位元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在HTML中, 节点有三种常见属性, 分别是id, name和class, 其中class是一个特殊的属性, 支持多个类名, 以空格隔开, 如下图所示:

你是否注意到, 为什么selenium中的find_element_by_class_name, 是by_class_name而不是, by_class呢?
首先我们要区分class属性和class_name的区别, 节点的class属性可以包含多个class_name, 每个以空格隔开, 如上图, 该按钮实际上是一个链接, class属性值为"btn btn-primary my-2", 其中包含三个class_name, 分别为"btn", "btn-primary", "my-2", 通过在开发者工具中按Ctrl+F搜索,我们可以发现"btn-primary"这个class_name是唯一的. 我们可以使用它来定位.

定位方式有3种:

  • 通过某个独特的class_name定位: dr.find_element_by_class_name('btn-primary')
  • 使用xpath通过完整的class属性定位: dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]')
  • 使用css selector, 通过某个属性或属性组合定位(推荐):
    dr.find_element_by_css_selector('.btn-primary') 或 dr.find_element_by_css_selector('.btn-primary.my-2')

示例代码如下:

from selenium import webdriver

dr = webdriver.Chrome()
dr.get('http://qaschool.cn/')

# dr.find_element_by_class_name('btn-primary').click()  # 通过某个class_name定位
# dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]').click()  # 通过xpath结合完整的class属性定位

# dr.find_element_by_css_selector('.btn-primary').click()  # 通过css selector结合某个class_name定位
dr.find_element_by_css_selector('.btn-primary.my-2').click()  # 通过css selector结合多个class_name定位

Selenium报错:StaleElementReferenceException

一个学生在操作页面跳转时遇到一个Selenium报错, 如下图所示:

StaleElementReferenceException:  Message: stale element reference: element is not attached to the page document ...

出错原因为: Selenium只能操作当前打开页面中的可见元素,当页面跳转, 前进, 后退, 或刷新后, 之前定位到的元素要重新定位才能使用.

可以尝试运行以下脚本, 查看报错信息:

from selenium import webdriver

dr = webdriver.Chrome()
dr.get('http://www.baidu.com')
search = dr.find_element_by_id("kw")

dr.refresh()
# search.send_keys("刷新后输入")  # 报错: StaleElementReferenceException

dr.get("http://www.hao123.com")
# search.send_keys("刷新后输入")  # 报错: StaleElementReferenceException
dr.back()
search.send_keys("刷新后输入")  # 报错: StaleElementReferenceException

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值