Python自动化测试中全局批量添加元素ID的实现方案

Ivy
Ivy
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍利用Python脚本在自动化测试前全局批量为页面元素添加ID的方法。针对重构导致元素层级变化或定位困难的问题,通过正则表达式匹配特定标签(如el-button)并注入唯一ID属性。文章涵盖Python环境配置、环境变量设置及核心脚本逻辑,帮助测试人员快速优化元素定位稳定性。

自动化测试元素定位背景

背景:

在自动化测试执行过程中,有时难以准确获取页面元素的属性,或者在代码重构过程中,原有方法的修改导致元素层级结构发生变化。为解决定位困难,可以通过批量设置或修改元素的ID属性来辅助定位。

Python环境配置与准备

一、Python环境准备工作:

功能:利用自动化脚本进行批量文件处理。例如,需要在大量文本文件中执行查找与替换操作,或者对大量图片进行复杂的命名和整理工作。

语法用例:


#!/usr/bin/python //脚本语言的第一行,只对 Linux/Unix 用户适用,用来指定本脚本用什么解释器来执行,即:调用 /usr/bin 下的 python 解释器,推荐使用#!/usr/bin/env python 会去环境设置寻找 python 目录,可以增强代码的可移植性,不要写死路径
 
print "Hello, World!" // 输出内容

python script.py // 使用python变量调用脚本:#!/usr/bin/python 被忽略,等同于注释
python3 hello.py // pyhton3版本执行
 ./script.py // 在python程序执行:#!/usr/bin/python 指定解释器的路径

中文编码:Python 3.x版本的源码文件默认采用UTF-8编码,因此可以直接解析中文字符,无需额外指定UTF-8编码。可通过命令 python -V 查看当前Python版本。


#!/usr/bin/python
# -*- coding: UTF-8 -*- //默认的编码格式是 ASCII 格式无法输出汉字
 print "你好,世界";

#!/usr/bin/python3 // python3版本
 print("Hello, World!")

下载:访问Python官网:https://www.python.org/ 进行下载。

设置环境变量(通常自动配置cmd):


path=%path%;C:\Python //注意: C:\Python 是指Python的安装目录

以下关键环境变量应用于Python运行环境:

变量名 描述
PYTHONPATH PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。
PYTHONSTARTUP Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此变量指定的文件中的代码。
PYTHONCASEOK 加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写.
PYTHONHOME 另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。

扩展知识:

1.集成开发环境(IDE:Integrated Development Environment):推荐使用PyCharm。

2.对于Python初学者,安装Anaconda包管理工具是一个便捷的选择。

3.CMD美化参考链接:https://zhuanlan.zhihu.com/p/31904974

批量添加元素ID的实现方案

二、实际应用:对指定元素批量添加ID属性

正则函数应用:


re.match(pattern, string, flags=0) // 参数说明:正则规则,字符串,标志位,如果字符串不符合正则表达式,则匹配失败
re.search(pattern, string, flags=0) // 匹配整个字符串,直到找到一个匹配。

示例代码逻辑:


#!/usr/bin/python3
import re 
line = "Cats are smarter than dogs"; // 猫比够更小
 matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
  print ("match匹配 : ", matchObj.group()) // No match
else:
  print ("No match!!")
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
  print ("search匹配: ", matchObj.group()) // dogs
else: print ("No match!!")

完整实例:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import re
import random
count=0
allbutton=set()
def buttonid(m):
  return "<el-button id='kp_but_%s' " % str(round(random.random()*10000))

for root, dirs, files in os.walk(".\src", topdown=False):
  for name in files:
    
    if os.path.splitext(name)[-1] == ".vue":
      
      # print( os.path.splitext(name)[-1])
      # print(name)
      filePath=os.path.join(root, name)
      file=open(filePath, mode='r+',encoding='UTF-8')
      content=file.read()
      searchObj=re.search( r'<el-button\s+', content, re.M|re.I)
      if searchObj:
        
        content = re.sub(r'<(el-button\s+)(?![a-zA-Z=\'\.;\%\-:"\s0-9@]*:?id=[a-zA-Z;=\'\.\%\-:"+$\s0-9@]*)',buttonid , content)
        count+=1
        # allbutton.add(searchObj.group())

        file=open(filePath, mode='w',encoding='UTF-8')
        lent=file.write(content)
        print(lent)
      else:
        print('None')
        
      # print(content)
  # for name in dirs:
  #   print(os.path.join(root, name))
print(count)

使用说明:

1.将当前脚本文件test.py放置于项目根目录,确保其与./src目录同级;

2.下载Python后,执行该脚本文件即可:


python test.py

以上为本文的全部内容,希望对您的学习有所帮助,也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表