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验证

欢迎技术交流:

相关推荐
卓码软件测评30 分钟前
【第三方CNAS软件测试机构:Gatling中的资源监控_实时收集服务器CPU、内存、磁盘I/O和网络指标】
后端·测试工具·测试用例·scala·压力测试
一念一花一世界4 小时前
接口管理工具选型:Swagger与PostIn全面对比指南
测试工具·postman·swagger·postin·接口管理工具
2501_915909065 小时前
Fiddler抓包与接口调试实战,HTTPHTTPS配置、代理设置与移动端抓包详解
前端·测试工具·ios·小程序·fiddler·uni-app·webview
天才测试猿16 小时前
Postman中变量的使用详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
weixin_5214311218 小时前
Selenium 使用方法一览表(基于 Selenium 4.x)
selenium·测试工具
阿蔹18 小时前
JavaWeb-Selenium 配置以及Selenim classnotfound问题解决
java·软件测试·python·selenium·测试工具·自动化
天才测试猿21 小时前
树控件、下拉框、文本框常用测试用例
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Wpa.wk1 天前
selenium自动化测试-简单PO模式 (java版)
java·自动化测试·selenium·测试工具·po模式
一念一花一世界1 天前
接口管理工具选型:Postman、Swagger与PostIn的全面对比指南
测试工具·postman·swagger·接口管理工具