一、WEB控件定位是什么

要想弄懂这个问题,我们还是基于实践来学习。我们先来看一条入门级别自动化测试用例的构成。

DemoCase:正确用户名和密码登录博客园,登录成功

URL:

https://account.cnblogs.com/signin

编写思路(入门级别)

1、打开谷歌浏览器

2、打开博客园登录网页地址

3、在用户名输入框内输入用户名

4、在密码输入框内输入密码

5、点击登录

6、检测是否跳转到了登录成功的页面

脚本如下图:

现在我们来分解下输入用户名这个动作

1、首先找到用户名输入框

2、在输入框中输入用户名

【找到用户名输入框】实现此步骤的前提就是需要掌握控件的定位。具体在脚本中实现也就是图中的第11行:

('//*[@autocomplete="username"]')

WEB控件定位所做的事情,就是通过特定的方式找到我们需要操作的页面控件

 

那么如何才能学会这个控件定位呢?第一步就是简单了解下前端的语言。和我一起往下看即可轻松学会。

二、WEB网页文本—HTML5

 

要想掌握WEB自动化测试的控件定位,我们首选要了解控件是什么。

控件就是浏览器展示的前端语言生成对象。

web前端的基础语言就是HTML5

依旧是老套路,拿博客园举例:

用户打开浏览器,看到的用户名输入框、密码输入框、登陆按钮、立即注册等等所有,都是浏览器展示的HTML5语言的对象。

我们按下F12键即可打开浏览器的调试模式,来查看网页的HTML5源代码。

如下图:

按下F12后右边页面中Elements选项对应的就是网页的html5代码

第一次接触肯定觉得非常晦涩难懂、云里雾里。但是相信我,万事开头难!你在看我自动化测试思维的文章以前不也是觉得自动化测试非常高大上吗?

不了解什么是自动化测试思维?可以看博主的另一篇文章

HTML5一个控件的写法一般是2个尖括号成对出现。

一、第一个尖括号的第一个单次为控件类型,之后是控件属性。

二、第二个尖括号表示此控件的尾部。

三、2个尖括号中间为控件在前端显示的文字部分。

举例说明的话。控件类型是狗的类型(中华田园犬、哈巴狗、牧羊犬等),控件属性就是这条狗的名字、性别、体重、毛发颜色等。2个尖括号中间的文字,就是你想在此页面上展示的这个狗的'名字'。

 

还是拿博客园的登陆界面举例来说:

点击'小箭头'定位控件,或者在控件处右键选中'检查元素',即可定位到指定的控件

控件的源码为:

<input _ngcontent-miv-c141=""matinput=""formcontrolname="username"placeholder="登录用户名 / 邮箱"autocomplete="username"class="mat-input-element mat-form-field-autofill-control ng-tns-c100-5 cdk-text-field-autofill-monitored ng-touched ng-dirty ng-invalid" id="mat-input-0" aria-describedby="mat-error-0" aria-invalid="true" aria-required="false">

input就是控件类型

input以外的就都是控件属性 

这个输入框的控件属性有:

_ngcontent-miv-c141=""

matinput=""

formcontrolname="username"

placeholder="登录用户名 / 邮箱"

autocomplete="username"

class="mat-input-element mat-form-field-autofill-control ng-tns-c100-5 cdk-text-field-autofill-monitored ng-touched ng-dirty ng-invalid"

id="mat-input-0"

aria-describedby="mat-error-0"

aria-invalid="true"

aria-required="false"

三、基于控件的唯一控件属性定位

了解了什么是控件,现在我们在上手控件的定位。

selenium有八种定位控件的方式,有6种都是基于HTML5原生控件的单一控件属性来定位的。

id定位:

find_element_by_id()

name定位:

find_element_by_name()

class定位:

find_element_by_class_name()

tag定位:

find_element_by_tag_name()

link定位:

find_element_by_link_text()

partial_link定位:

find_element_by_partial_link_text()

以下两种为特定的2种控件定位方法,下一篇文章再做详解。
xpath定位:find_element_by_xpath()CSS定位:find_element_by_css_selector()

下面我将举例来讲解这6种基于单一控件属性的定位方法。

还是拿博客园的登陆界面举例来说:

登陆用户名的输入框的HTML5源码为:

<input _ngcontent-miv-c141=""matinput=""formcontrolname="username"placeholder="登录用户名 / 邮箱"autocomplete="username"class="mat-input-element mat-form-field-autofill-control ng-tns-c100-5 cdk-text-field-autofill-monitored ng-touched ng-dirty ng-invalid" id="mat-input-0" aria-describedby="mat-error-0" aria-invalid="true" aria-required="false">

这个输入框的控件属性有:

_ngcontent-miv-c141=""

matinput=""

formcontrolname="username"

placeholder="登录用户名 / 邮箱"

autocomplete="username"

class="mat-input-element mat-form-field-autofill-control ng-tns-c100-5 cdk-text-field-autofill-monitored ng-touched ng-dirty ng-invalid"

id="mat-input-0"

aria-describedby="mat-error-0"

aria-invalid="true"

aria-required="false"

对应的定位方法:

id属性来定位此控件

写法为:

find_element_by_id(mat-input-0)

name属性来定位此控件

此控件前端开发没有定义name属性,则无法使用此定位方法

tag属性来定位此控件(控件的类型)

写法为:

find_element_by_tag_name('input')

class属性来定位此控件

写法为:

find_element_by_class_name(mat-input-0)

另外两种定位是针对link属性的控件,也就是链接控件。如下图:

依旧是老老路。使用博客园登陆页举例:

【立即注册】就是页面中的一个link控件,其作用就是跳转到注册页面。

<a _ngcontent-arq-c141="" class="ng-tns-c141-2" href="/signup?returnUrl=https:%2F%2Fwww.cnblogs.com%2F">立即注册</a>

他的控件属性有class="ng-tns-c141-2"

link定位(通过link控件的文本值)

find_element_by_link_text('立即注册')

但是部分页面会存在,link的文本值非常长,所以就发明了partial_link定位。

如下图中的百度文库的某一页面:

link的文本值为:全国2018年10月04741计算机网络原理真题以及答案解析

定位的脚本就可以写成:(只取文本的某一段值即可)

find_element_by_link_text('04741计算机网络')

但是这样的定位方式存在一个致命且常见的问题:

随着前端的技术不断的发展,页面的复杂度越来越高。一个页面的控件越来越多(tag不唯一),id、name、class_name可能有很多重名或者完全是动态的一串字母(id、name、class_name、link_name可能都不唯一),我们基于唯一控件属性定位的在特别复杂的项目上可能完全无法完成UI自动化测试的定位工作。

为了解决上述情况,伟大工程师们又发明了XPATH定位和CSS定位!这两种定位在现在的前端框架中,几乎是万能的定位方法了。但是学会他们的前提,也是需要掌握H5语言的基本的原理,于是有了此文。

本文已超过2400字,由于篇幅限制,将在下一篇文章中详解这2种定位方法(XPATH定位和CSS定位)。敬请各位观众大老爷们期待。

如果你觉得本文对你有用,麻烦给本文点个赞。这是对作者最大的支持与鼓励,我将继续输出更多更有价值的文章。谢谢!

关注博主的微信公众号,免费获取更多干货!

【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位的更多相关文章

  1. POPTEST培训:web自动化测试之DOM

    POPTEST培训:web自动化测试之DOM   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq ...

  2. 基于 HTML5 WebGL 的 3D 工控裙房系统

    前言 工业物联网在中国的发展如火如荼,网络基础设施建设,以及工业升级的迫切需要都为工业物联网发展提供了很大的机遇.中国工业物联网企业目前呈现两种发展形式并存状况:一方面是大型通讯.IT企业的布局:一方 ...

  3. 基于HTML5 Canvas 实现矢量工控风机叶轮旋转

    之前在拓扑上的应用都是些静态的图元,今天我们将在拓扑上设计一个会动的图元--叶轮旋转. 先看看最后我们实现的效果:http://www.hightopo.com/demo/fan/index.html ...

  4. 工控SCADA模型 基于HTML5 Canvas WebGL制作摩托车

    工业方面制作图表,制作模型方面运用到 3d 模型是非常多的,在一个大的环境中,构建无数个相同的或者不同的模型,构建起来对于程序员来说也是一件相当头疼的事情,我们利用 HT 帮大家解决了很大的难题,以下 ...

  5. 基于HTML5及WebGL的工控SCADA模拟飞机飞行

    昨天看到一篇文章说是学习如何开飞机的,然后我就想,如果我也可以开飞机那就好玩了,每个人小时候都想做飞行员!中国飞行员太难当了,再说也不轻易让你开飞机!后来我就想如果能用 HT 开飞机那就是真的有趣了, ...

  6. python+selenium的web自动化测试之二(Jenkins自动执行)

    上一篇需要手工去到cmd下执行脚本,不符合自动化测试的终极目标.现我们集成到Jenkins上,通过Jenkins一键执行或定时任务执行. 参考: https://www.cnblogs.com/ces ...

  7. 基于HTML5 WebGL实现 json工控风机叶轮旋转

    突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...

  8. Web自动化框架搭建之二基于数据驱动应用简单实例~~

    整体框架,先划分成细小功能模块~~,从最简单的开始,介绍 实现循环百度搜索实例: #coding=utf-8 '''Created on 2014��6��9�� @author: 小鱼'''impo ...

  9. Web应用程序开发,基于Ajax技术的JavaScript树形控件

    感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用, ...

随机推荐

  1. PHP unixtojd() 函数

    ------------恢复内容开始------------ 实例 把 Unix 时间戳转换为儒略日计数: <?phpecho unixtojd();?> 运行实例 » 定义和用法 uni ...

  2. JavaScript Object的复制

    var obj = { a: 1, b: 2, c: { d: 3, e: 4, f: function () { console.log("对象复制"); } } } 1. fo ...

  3. springboot2.1.x版本报错总结

    我使用的是springboot  2.1.7.RELEASE  springcloud  Greenwich.SR2 boot和cloud对应的版本号不能搞混,对应版本请参考https://sprin ...

  4. OpenCL设计优化(基于Intel FPGA SDK for OpenCL)

    1.首先了解Intel FPGA SDK for OpenCL实现OpenCL的设计组件,包括: kernels, global memory interconnect, local memory, ...

  5. 移动物体监控系统-sprint3移动监控主系统设计与开发

    一.移动监控的原理 通过获取摄像头图像,比较前后每一帧的图像数据,从而实现移动物体监控.所有移动监控原理都是这样,只是图像帧的对比的算法不一样. 二.移动物体监控系统的实现 选择开源的移动监控软件mo ...

  6. 最全总结!聊聊 Python 调用 JS 的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  7. C语言学习笔记之原码反码补码

    原码:就是我们自己看的,以及机器输出给我们看的 补码:机器永远是以补码的形式将数据保存在计算机中 正数: 原码=反码=补码 负数: 反码:原码的符号位不变,其他位取反 ,1变0   0变1 补码:机器 ...

  8. puppet单机模型

    puppet配置 命令 facter -p: 显示所有的变量 puppet apply [-v] [--noop] [-e 'puppet expression: 一般为include httpd等' ...

  9. Web For Pentester 学习笔记 - XSS篇

    XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...

  10. C#LeetCode刷题之#125-验证回文串(Valid Palindrome)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3899 访问. 给定一个字符串,验证它是否是回文串,只考虑字母和数 ...