入门Web自动化测试之元素定位的配置管理

news2024/9/24 19:15:45

之前我们讲过Selenium使用教程,这一篇我们来学习元素定位的配置管理。

目的

Web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持,其整体的完整生态已经远远超过了C/S架构方面的测试价值。

接下来我们在上一次的基础之上,对已经初具雏形的自动化代码进行补充和优化,利用Python的特性来对定位元素的管理方法进行设计并讲解其中的思路与注意点。

管理方法

一般来说,界面元素的信息管理方法比较常见的有配置文件、持久化、专项平台和工具等。如何取舍大家也是众说纷纭,但既然我们使用了Python这门语言,那么就要好好利用其优势,将管理的成本(人力、耗时等)降到最低。

相较于一般文本,我们可以使用ini格式的配置文件来对已知晓具体信息的元素进行统一的管理,将业务代码与界面元素进行有效分离,减少后期因需求变动而发生的大量维护工作。

通过以上所说的方法,我们可以将大部分常用的元素信息录入进配置文件,即使后期产品或项目发生了变更,我们也可以灵活应对。

举个例子,如果产品或项目发生了逻辑与功能的变更,那么我们只修改业务代码即可;若是发生了UI变更,我们也只需要修改对应的配置文件。这样的低耦合自动化框架才可以有效的提升日常的测试团队工作效率。

另外,鉴于大部分团队内会有多名测开角色的存在,在定义配置文件之初,也应该有效的开展团队内的讨论,将配置文件的一些总要因素(编写与命名规范、存放路径等)进行充分的认知统一与整合。以防在后期使用时出现元素名不同而无法找到等等诸如此类的低级错误。

配置方法

接下来我们先来看下一般的配置文件内都需要写哪些内容,下图展示的是登录页面的相关元素定位信息,这里还是给大家说一下,如果系统的规模不是太大的话建议还是把所有的元素信息放在一个配置文件内进行管理,不宜进行多路径多文件的分散处理。

文件的格式基本就是ini的配置格式,内容由多个section构成(方括号内),每个section内可以存在多个配置项,每一条配置项由配置项名称、定位方法、定位值组成。

配置项名称不用多解释,在代码中会直接使用到,可以简单的理解为类似变量名,后面的id则是定位方法,这里不拘泥于id,如果要使用其他的定位方式,改成对应的方法即可,具体的定位方法可以参看前一篇中的get_element方法。

当中的冒号则只是方便后期在业务代码中进行取值的分割,不强制使用冒号,其他符号均可。

最后的是定位值,也就是开发同学在开发界面中各类元素的对应属性的属性值,这里要注意的是,值必须和你前面指定的方法相对应,千万不能搞错。

 

这里举个简单的例子,比如LoginPageElement类中有一个get_element的方法,那我们将原有的业务代码内元素转化为配置文件的方法为:

log_pg_ele = LoginPageElement('chrome')log_pg_ele.get_element('id', 'transaction_log_treaty')

 

是不是很简单,因为在原有的get_element方法内,我们已经定义了相关的定位方法与定位值这两个参数,所以根据配置文件的配置项组成方式可以进行无缝转换,无须再进行额外的操作。

方法实现

有了对应的配置文件,我们就可以使用python来设计实现相关的配置解析与元素调用方法。这里我们先将对应的ini文件创建在各自项目指定的目录中,再啰嗦一次,如果是团队公用,文件名与存放路径需要统一。

假设我的配置文件名为FundManSys.ini,存放在项目的conf文件夹下。我们在使用Python解析配置文件之前,需要先安装对应的功能模块。

这里我们使用configparser这个库,它可以读取解析我们一般的ini类配置文件。

无论是python interpreter亦或是pip install都可以,安装完成之后我们开始进行整体的功能设计与实现。

首先,我们先将读取配置文件的功能进行实现。

这里我创建了一个类,但没有写出来,我们直接展示其内的方法,名字什么的大家可以自由发挥, 构造函数中将需要指定的节点名称带入,如果不指定名称,则带入特定值。

第二段代码通过调用方法ConfigParser来读取解析配置文件,read()内填写配置文件的路径与文件名,这里设置了变量,最后将整个对象返回出来。


def __init__(self, section=None):
    if section:
        self.section = section
    else:
        self.section = 'business_log_v2'

def load_ini(self):
    cf = configparser.ConfigParser()
    cf.read(ini_file)
    return cf

那么取得对象之后我们如何调用里面的信息呢,接下来就需要对其内进行进一步的处理实现。

这里使用了链式写法,不这么写的话也可以在构造函数中的定义一个变量来接收load_ini方法中返回的对象。section和key两个参数也不用多说了吧,分别对应的已经很明显了。

def get_data(self, key):
    data = self.load_ini().get(self.section, key)
    return data

基本的配置文件解析功能就设计封装好了,是不是很简单?那么我们拿到想要数据之后如何实际结合至现有的元素操作代码中去呢,紧接着我们就可以开始将业务代码与实际配置功能进行对接了。

我们把之前设计的get_element方法进行优化,添加取得数据并处理的操作。

这里实例化的load_ini因为没有指定节点名,就会默认使用business_log_v2节点名。

这里已经将原来的方法参数进行变更,可以看到变更后的参数变少了,原有的by与ele两个参数也被配置项中的定位方法与定位值所替代,这也就是我们要达到的目的。

具体变化大家可以对比前一篇中的get_element方法。


def get_element(self, key):
    element = None
    load_ini = EleConfiguration()
    data = load_ini.get_data(key)
    by, ele = data.split(':')
    try:
        if by == 'id':
            element = self.driver.find_element(By.ID, ele)
        elif by == 'name':
            element = self.driver.find_element(By.NAME, ele)
        elif by == 'css':
            element = self.driver.find_element(By.CSS_SELECTOR, ele)
        elif by == 'class':
            element = self.driver.find_element(By.CLASS_NAME, ele)
        else:
            element = self.driver.find_element(By.XPATH, ele)
    except:
        session.add(ele_err_msg)
        session.commit()
    return element

至此我们的整体配置管理设计已经完成,真实的使用过程中我们只需要根据自己的实际场景进行页面业务逻辑的代码编写即可,无论是何种界面业务操作都可以直接实例化并调用get_element方法来进行元素定位了,并且由于真实元素信息与业务代码分开的关系,整体的可读性与维护性也是大大提升。

使用注意点

1、Python2与3的版本内configparser模块的名字不同,有大小写之分,需要注意,2是ConfigParser,3是configparser;

2、配置项内的键值对如果连接符号使用冒号,注意中英文状态,以免出现使用中文冒号而意外报错的情况出现;

3、配置文件中不要设置过多的section名,过多的名称容易让配置文件的内容过于混乱,不予与维护;

4、与其说注意更不如说是规范,配置文件内的各类名称尽量都使用英文来定义,和编写代码的命名意义差不多,拼音不应该出现在此类的配置文件内。

 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI巨浪下,数据技术如何驱动智能未来?

引言 数据技术是大数据时代的核心驱动力,也是推动各行各业数字化转型和智能化升级的关键因素。随着云计算、人工智能、区块链等新兴技术的不断发展和融合,数据技术也呈现出多模态、混合处理、自动化管理等新的趋势和特点。 8 月 19 日(周六&…

UniApp 制作高德地图插件

1、下载Uni插件项目 在Uni官网下载Uni插件项目,并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…

e6zzseo:跨境独立站还能做起来吗?

跨境独立站指的是在其他国家或地区创建和运营自己的电子商务网站。虽然跨境独立站在理论上是可行的,但成功实施和运营它可能面临一些挑战。以下是e6zzseo分析的一些考虑因素和建议,以帮助你更好地评估是否可以成功运营跨境独立站: 做跨境独立…

【0基础入门Python笔记】python 之基础语法、基础数据类型、复合数据类型及基本操作

python 基础(一) 基础语法规则基础数据类型数字类型(Numbers)字符串类型(String)布尔类型(Boolean) 复合数据类型List(列表)Tuple(元组&#xff0…

excel常见的数学函数篇2

二、数学函数 1、ABS(number):返回数字的绝对值 语法:ABS(数字);返回数字的绝对值;若引用单元格,把数字换为单元格地址即可 2、INT(number):向小取整 语法:INT(数字);若引用单元格…

自夹持P型屏蔽型碳化硅沟槽型绝缘栅双极晶体管,用于低开通电压和开关损耗

目录 标题:Self-Clamped P-shield SiC Trench IGBT for Low On-State Voltage and Switching LossProceedings of the 35st International Symposium on Power Semiconductor Devices & ICs摘要信息解释研究了什么文章的创新点文章的研究方法文章的结论 标题&am…

为什么要报11月份的PMP考试?一篇说清楚!

各位PMP考生即将迎来8.19的考试,现在心里难免会有点焦虑,相信大家在系统的学习完PMP课程之后,都能顺利上岸,3A通过! 另外PMP11月份的考试正在报名当中!大家尽量提前报名,给自己留充足的时间备考…

夏威夷等全球多地深陷「末日狂烧」,关键时刻 AI 监测能否跑赢野火?

内容一览:当地时间 8 月 8 日,美国夏威夷州突发野火,当地居民和游客不得不跳入太平洋中躲避火势。截至 8 月 17 日,这场野火已经造成110 人死亡,超过 1000人失踪。与此同时,美国、加拿大、法国等地也正遭遇…

GPU短缺:人工智能行业的可持续发展问题

原创 | 文 BFT机器人 2023年8月,人工智能似乎会受到GPU供应的瓶颈。 “人工智能热潮被低估的一个原因是GPU/TPU短缺。这种短缺导致了产品推出和模型培训的各种限制,但这些都不明显。相反,我们看到的是英伟达的股价飙升。一旦供给满足需求&am…

c语言——字符转ASCLL码

//字符转ASCLL码 #include<stdio.h> #include<stdlib.h> int main() {char c;printf("输入字符&#xff1a;");scanf("%c",&c);printf(" %c 的ASCLL为: %d \n",c,c);system("pause");return 0;}

修改文件内容

修改文件内容 按照下方所述&#xff0c;创建一个名为 /home/curtis/ansible/issue.yml 的 playbook &#xff1a; 该 playbook 将在所有清单主机上运行 该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本&#xff1a; 在 dev 主机组中的主机上&#xff0c;这行文本…

通过模拟考试系统培养学生应对压力的能力

随着现代社会竞争的加剧&#xff0c;学生面临着越来越大的考试压力。为了培养学生应对压力的能力&#xff0c;许多学校开始采用模拟考试系统。模拟考试系统通过模拟真实考试环境和考试内容&#xff0c;帮助学生逐渐适应考试压力&#xff0c;并提供相应的培训和指导。 模拟考试…

pytorch2.0.1 安装部署(cpu+gpu) linux+windows

官网打开可能较慢&#xff0c;耐心等待 pytorch官网 以下操作在默认网络环境即可使用 一、说明和前期准备 1.pytorch是一个和tensorflow类似的框架 如果需要安装tensorflow&#xff0c;可以参考&#xff1a; tensorflow 1&#xff0c;2 cpugpu&#xff08;windowslinux&…

演讲与口才能力培训的实践案例分析

演讲与口才能力培训的实践案例分析 摘要&#xff1a; 演讲与口才能力是一项重要的沟通技巧&#xff0c;对于个人和职业发展都具有重要意义。本文通过案例分析的方式&#xff0c;探讨了演讲与口才能力培训的实践&#xff0c;以及培训对于个人能力提升的影响。通过对不同案例的研…

12、缓存双写一致性之更新策略探讨

缓存双写一致性之更新策略探讨 1、 面试题 只要双写&#xff0c;就一定会有数据一致性问题&#xff0c;那么如何解决一致性问题&#xff1f; 双写一致性&#xff0c;你先动缓存redis还是数据库&#xff1f;为什么&#xff1f; 延时双删做过吗&#xff1f;会有哪些问题&#xf…

《算法竞赛·快冲300题》每日一题:“立方体表面距离”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 立…

作为spring框架的另外的重点AOP的介绍(详细篇)

一.Aop介绍&#xff0c;以及作用范围&#xff0c;和其专业名词的解释 1.什么是Aop&#xff1f; Java Spring中的AOP&#xff08;面向切面编程&#xff09;是一种编程范式&#xff0c;用于通过将与核心业务逻辑无关的横切关注点&#xff08;如日志记录、性能统计、安全控制等&…

BOXTRADE-天启量化分析平台 系统功能预览

BOXTRADE-天启量化分析平台 系统功能预览 系统功能预览 1.登录 首页 参考登录文档 2. A股 行情与策略分析 2.1 A股股票列表 可以筛选和搜索 2.2 A股行情及策略回测 2.2.1 行情数据提供除权和前复权&#xff0c;后复权数据&#xff1b;外链公司信息 2.2.2 内置策略执行结果…

使用 PyTorch 进行高效图像分割:第 2 部分

一、说明 这是由 4 部分组成的系列的第二部分&#xff0c;旨在使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何实现基线图像分割卷积神经网络&#xff08;CNN&#xff09;模型。 图 1&#xff1a;使用 CNN 运行图像分割的结果。按从上到下的顺序…

建筑结构健康监测系统,解锁建筑安全监测新模式

随着现代建筑技术的发展&#xff0c;高层、超高层、大型公共建筑以及桥梁等复杂结构的数量不断增加&#xff0c;对建筑结构监测的要求也日益迫切。万宾建筑结构健康监测系统通过先进的传感技术和和数据分析技术来持续监测建筑的结构健康&#xff0c;这种监测的目的是可以识别建…