1.Selenium元素定位
1.1自动化测试基础
1.1.1分层的自动化测试
传统的自动化测试更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段(层
次)都需要自动化测试。
分层自动化测试
单元测试:我们需要规范的来做单元测试同样需要相应的单元测试框架,如java的Junit、testNG,
C#的NUnit,Python的unittest、pytest等,几乎所有的主流语言,都会有其对应的单元测试框架。
集成、接口测试:对于不少测试新手来说不太容易理解,单元测试关注代码的实现逻辑,例如一个if
分支或一个for循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。
例如,我定义一个add()函数用于计算两个参数的结果并返回,那么我需要调用add()并传参,并比较返
回值是否两个参数相加。当然,接口测试也可以是url的形式进行传递。例如,我们通过get方式向服务
器发送请求,那么我们发送的内容做为URL的一部分传递到服务器端。但比如Webservice技术对外提
供的一个公共接口,需要通过soapUI等工具对其进行测试。
UI层的自动化测试:这个大家应该再熟悉不过了,大部分测试人员的大部分工作都是对UI层的功能
进行测试。例如,我们不断重复的对一个表单提交,结果查询等功能进行测试,我们可以通过相应的自动
化测试工具来模拟这些操作,从而解放重复的劳动。UI层的自动化测试工具非常多,比较主流的是QTP,
RobotFramework、watir、Selenium等。
1.1.2什么样的项目适合自动化测试
不是所有项目都适合实施自动化测试的,以免对项目实施自动化过程中感到困难重重,浪
费了大量的人力和时间而没有得到应有的收益。
- 1 任务测试明确,不会频繁变动
- 2 每日构建后的测试验证
- 3 比较频繁的回归测试
- 4 软件系统界面稳定,变动少
- 5 需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任务
- 6 软件维护周期长
- 7 项目进度压力不太大
- 8 被测软件系统开发比较规范,能够保证系统的可测试性
- 9 具备大量的自动化测试平台
- 10 测试人员具备较强的编程能力
软件需求变动不频繁
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根
据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个开发代码的过程,需
要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本高于利用其节省的测试成
本,那么自动化测试便是失败的。
项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动
化测试,而变动较大的仍是用手工测试。
项目周期较长
由于自动化测试需求的确定、自动化测试框架的设计、脚本的开发与调试均需要时间来完成。这
样的过程本身就是一个测试软件的开发过程。如果项目的周期比较短,没有足够的时间去支持这样一
个过程,那么自动化测试便成为笑谈。
自动化测试脚本可重复使用
自动化测试脚本的重复使用要从三个方面来考量,一方面所测试的项目之间是否很大的差异性(如
C/S系统和B/S系统的差异);所选择的测试工具是否适应这种差异;最后,测试人员是否有能力开发出
适应这种差异的自动化测试框架。
1.1.3自动化测试以及工具简介
自动化测试的概念有广义与狭义之分;广义上来讲所有借助工具来进行软件测试都可以称为自动化测
试;狭义上来讲,主要指基于UI层的自动化测试;除此之外还有基代码编写阶段的单元自动化测试,基
本集成测试阶段的接口自动化测试。
目前市面上的自动化测试工具非常多,下面几款是比较常见的自动化测试工具。
QTP
QTP是HPQuickTestProfessionalsoftware的简称,是一种企业级的自动测试工具。提供了强大
易用的录制回放功能。支持B/S与C/S两种架构的软件测试。是目前主流的自动化测试工具。
RobotFramework
RobotFramework是一款Python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,
可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。
watir
Watir全称是“WebApplicationTestinginRuby”。它是一种基于Web模式的自动化功能测试工具。
watir是一个Ruby语言库,使用Ruby语言进行脚本开发。
Selenium
Selenium也是一个用于Web应用程序测试的工具,支持多平台、多浏览、多语言去实现自动化测试。
目前在web自动化领域应用越来越广泛。
当然,除了上面所列自动化测试工外,根据不同的应用还有很多商业的、开源的以及公司自己开发的
自动化测试工具。
1.2 Selenium工具介绍
1.2.1 什么是Selenium
Selenium自动化测试浏览器,它主要是用于Web应用程序的自动化测试,但肯定不只局限于此,同
时支持所有基于web的管理任务自动化。
Selenium的特点:
- 开源,免费
- 多浏览器支持:FireFox、Chrome、IE、Opera
- 多平台支持:linux、windows、MAC
- 多语言支持:java、Python、Ruby、php、C#、JavaScript
- 对web页面有良好的支持
- 简单(API简单)、灵活(用开发语言驱动)
- 支持分布式测试用例执行
Selenium经历了两个版本,Selenium1.0和Selenium2.0,Selenium也不是简单一个工具,而
是由几个工具组成,每个工具都有其特点和应用场景。
Selenium家谱
1.2.2 Selenium简介
Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。
Selenium的发展经历了三个阶段,第一个阶段,也就是selenium1的时代,在运行selenium1.0程序之前,我们得先启动selenium server端(selenium remote control),我们简称RC。RC主要包括三个部 分:launcher,http proxy,selenium core。其中selenium core是被selenium server嵌入到浏览器页面中的,selenium core内部是一堆javascript函数构成,通过调用这些函数来实现对浏览器的各种操作。
很显然比较繁琐,这并不是最佳自动化解决方案,于是后来有了webdriver。 selenium2 的时代合并了webdriver,也就是我们通常说的selenium,selenium2是默认支持Firefox浏览器的,这点非常方便。当然也支持其他更多浏览器,Ie和chrome浏览器需要下载驱动包,并添加到环境变量下。
selenium3 是2016年十月份左右出来的,并且现在默认安装都是selenium3了,selenium3在selenium2的基础上做了一些调整,最明显的区别 就是 selenium2对Firefox的支持最高只支持46及以下版本。selenium3可以支持47以上版本,但是需要下载 geckodriver.exe驱动,并添加到环境变量path下。
2.Selenium元素定位
2.1环境准备
1.浏览器选择:Firefox
2.安装插件:Firebug和FirePath(设置》附加组件》搜索:输入插件名称》下载安装后重启浏览器)
3.安装完成后,页面右上角有个小爬虫图标
4.快速查看xpath插件:XPath Checker这个可下载,也可以不用下载
5.插件安装完成后,点开附加组件》扩展,如下图所示
组件2.2查看页面元素
以百度搜索框为例,先打开百度网页
1.点右上角爬虫按钮
2.点左下角箭头
3.讲箭头移动到百度搜索输入框上,输入框高亮状态
4.下方红色区域就是单位到输入框的属性:
<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">
image
2.3 元素定位
2.3.1 find_element_by_id()
- 从上面定位到的元素属性中,可以看到有个id属性:id="search-key",这里可以通过它的id属性单位到这个元素。
- 定位到搜索框后,用send_keys()方法
2.3.2 find_element_by_name()
-
从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。
说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框。
- 从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。
2.3.4 find_element_by_tag_name()
- 从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input
- 很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错
2.3.5 find_element_by_link_text()
- 定位百度页面上"hao123"这个按钮
查看页面元素:
<a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>
- 从元素属性可以分析出,有个href = "http://www.hao123.com
说明它是个超链接,对于这种元素,可以用以下方法
2.3.6 find_element_by_partial_link_text()
- 有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了
- 如“hao123”,只需输入“ao123”也可以定位到
2.3.7 find_element_by_xpath()
- 以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决
- xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath
3.安装上图的步骤,在FriePath插件里copy对应的xpath地址
image2.3.8 find_element_by_css_selector()
- css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解
- 打开FirePath插件选择css
- 定位到后如下图红色区域显示
2.4 总结
selenium的webdriver提供了八种基本的元素定位方法,前面六种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。
1.通过id定位:find_element_by_id()
2.通过name定位:find_element_by_name()
3.通过class定位:find_element_by_class_name()
4.通过tag定位:find_element_by_tag_name()
5.通过link定位:find_element_by_link_text()
6.通过partial_link定位:find_element_by_partial_link_text()
7.通过xpath定位:find_element_by_xpath()
8.通过css定位:find_element_by_css_selector()
网友评论