一、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 gd_info - 取得当前安装的 GD 库的信息

    gd_info — 取得当前安装的 GD 库的信息. 语法 array gd_info ( void )高佣联盟 www.cgewang.com 返回一个关联数组描述了安装的 GD 库的版本和性能. ...

  2. 最新 laravel5.8 连接redis集群

    简介 Redis 是一个开源的,高级键值对存储数据库.由于它包含 字符串 , 哈希 , 列表 , 集合 , 和 有序集合 这些数据类型,所以它通常被称为数据结构服务器. 在使用 Laravel 的 R ...

  3. TF签名为什么这么稳定?TF签名找微导流!

      TF签名作为目前最稳定的签名方式收到了业界开发者们的认可,而在如今鱼龙混杂的签名平台中,应该如何选择客厅的TF签名平台呢?下面就一起来看看TF签名为什么这么稳定?TF签名找微导流!   TF签名的 ...

  4. IntelliJIDEA的安装、配置与使用

    引言: IDEA,全称 IntelliJ IDEA,是 Java 语言的集成开发环境,IDEA 在业界被公认为是 最好的 java 开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE 支持 ...

  5. qt中使用dll库的方法

    使用dll文件时首先通过dll文件导出符号表,如下面介绍 1. 制作def 直接调用 pexports mylib.dll > mylib.def 2. 生成a 需要mylib.dll和myli ...

  6. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  7. 再见,付费录屏软件!我用70行Python代码打造免费版!

  8. 排查Mysql突然变慢的一次过程

    排查Mysql突然变慢的一次过程 上周客户说系统突然变得很慢,而且时不时的蹦出一个 404 和 500,弄得真的是很没面子,而恰巧出问题的时候正在深圳出差,所以一直没有时间 看问题,一直到今天,才算是 ...

  9. [leetcode/lintcode 题解] Google面试题:合法组合

    给一个单词s,和一个字符串集合str.这个单词每次去掉一个字母,直到剩下最后一个字母.求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中.例如单词是’abc’,字符串集合是{‘a’,’ab ...

  10. C#LeetCode刷题之#682-棒球比赛(Baseball Game)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4028 访问. 你现在是棒球比赛记录员. 给定一个字符串列表,每个 ...