selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明

selenium遇到下面这种元素:

复制代码
<th id="demo id" class="value1 value2 value3 ">

1、虽然id一般不会有空格,但是前端错误的这种写法(如下图),会造成使用id定位不到元素,如:

python 复制代码
find_element('id', 'demo id')

这种写法会直接报错。

2、class属性有空格,表示有多个属性,一般的解决办法就是使用其中一个属性,如:

python 复制代码
find_element('class name', 'value1')

这种写法是可以定位到元素,但是往往测试人员在使用时,会将其错误的写成:

python 复制代码
find_element('class name', 'value1 value2 value3')

二、解决方案

为了避免上述这种常见的错误,可以写一个方法封装一下,遇到这种错误时,将其转为xpath定位即可。

python 复制代码
    def _fix_find_elements_by_multiple_values_error(self, by, value) -> List[WebElement]:
        """
        修复 `find_elements` 方法在使用 'id' 或 'class name' 定位时,
        value为复合值(比如value='value1 value2')可能引发的 InvalidArgumentException。
        """
        try:
            return super().find_elements(by, value)
        except InvalidArgumentException as original_e:
            if by == 'class name':
                by = 'class'
            try:
                return super().find_elements('xpath', f'//*[@{by}="{value}"]')
            except:
                raise original_e

三、Demo验证

欢迎技术交流:

相关推荐
PhotonixBay1 小时前
增材制造表面粗糙度测量:3D共聚焦多尺度方法
功能测试·测试工具·共聚焦显微镜·增材制造·测试标准
硬禾科技19 小时前
连接世界的工程哲学
嵌入式硬件·测试工具·自动化·硬件工程
wuhuhuan1 天前
Case Generator 平台升级
python·测试工具·自动化
柒儿吖1 天前
SSCom 重构全记录:用 Rust 把串口调试助手送上鸿蒙 PC、macOS、Windows和Linux
测试工具·rust·harmonyos
AngusKit1 天前
AngusTester 与 Postman、MeterSphere:私有化统一测试怎么选
测试工具·jmeter·压力测试·metersphere·web测试·移动端测试
蒲公英内测分发2 天前
App 更新一次就换一个二维码?智能硬件配套 App 的版本和下载入口怎么管理
人工智能·测试工具·智能家居·智能硬件
测试老哥2 天前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
是Leo刘啊2 天前
别再手敲 JSON 造数据了!Mock 数据生成器实战与避坑指南
测试工具
Luminbox紫创测控2 天前
航天热平衡试验用太阳模拟器:光学积分器设计与均匀性提升方法
测试工具·安全性测试·太阳光模拟器·测试标准·航天热平衡实验
程序员杰哥2 天前
UI自动化测试:Jenkins配置
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例