Selenium 自动化测试基础
Selenium是一系列基本Web的自动化测试工具,它提供了许多测试函数,用于支持Web自动化测试。这些函数非常灵活,它们能够通过多种方式定位界面元素,并可以将预期结果与系统实际结果进行比较。
1.1 自动化测试基础
1.1.1软件测试概述
软件测试就是为了发现程序中的错误而分析或者执行程序的过程。
软件测试的主要工作是验证和确认。
验证是保证软件正确地实现了一些特定的功能的一系列活动,即保证软件以正确的方式做了该做的事。
确认的目的是想证实在一个给定的外部环境中软件的逻辑正确性,即保证软件做了所期望的事情。
软件测试的分类:
- 从是否关心软件内部结构和具体实现的角度分为白盒测试、黑盒测试、灰盒测试。
- 从是否执行程序的角度分类静态测试、动态测试。
- 按软件开发过程的阶段分为单元测试、集成测试、系统测试、验收测试。
- 按测试的具体目标分为功能测试、性能测试、安全测试、回归测试、兼容性测试、安装测试等。
1.1.2 自动化测试简介
自动化测试就是由机器来代替人执行软件测试。
使用自动化测试的条件:
- 软件需求变动不频繁。
- 项目周期足够长。
- 自动化测试脚本可重复使用。
1.1.3 Selenium简介
Selenium工具是ThoughtWorks公司发布的,该工具有以下几个特点:
- 可对多浏览器进行测试,如IE、Chrome、Firefox、Safari、Android手机浏览器等。
- 支持各种语言,如:JAVA、PHP、C#、Python、Ruby等。
- 跨平台,如Windows、Linux、iOS、Android等。
- 开源免费。
1.Selenium工具组主要包括以下几种:
- Selenium IDE:是一个用于构建脚本的初级工具。它是Firefox插件,拥有一个易于使用的界面。它有录制功能,能够记录用户执行的操作,并将其导出可重复使用的脚本 ,然后用于执行测试。
- Selenium 1(Selenium RC):是Selenium最主要的测试工具之一,它可以通过各种编程语言编写测试代码,同时支持所几乎所有的浏览器测试。
- Selenium 2(Webdriver):作为最新版的Selenium工具,代表未来Selenium的发展方向。它提供了许多功能,包括一套组织性更好、面向对象的API,并克服了Selenium 1测试的局限性。
- Selenium Grid:能够让Selenium 1的测试在多个不同的环境中运行,也能让测试并行执行。也就是说,各个测试能够在同一时间,不同机器上运行,从而大大提高性能,也提高了测试的效率。
注意点:Selenium 1 和Selenium 2的测试脚本可以相互移植。Selenium 2 提供了向前兼容的接口。
2.选择合适的Selenium工具
大多数用户都是从Selenium IDE开始的,如果没有编程经验,可能通过它快速熟悉Selenium的命令。
为了有效的使用Selenium,需要使用Selenium 1和Selenium 2,并配合使用一种编程语言,自己创建并运行测试。
Selenium Gird 一般用于分布式和集群测试,需要在多台机器同时执行测试时,可以选择使用该工具。
1.2 HTML/XML/XPath基础
1.2.2 HTML基础
HTML(Hyper Text Markup Language)指的是超文件标记语言。不是编程语言,而是标记语言。HTML包括一套标记标签,它使用标记标签来描述网页。
一个最基本的HTML包括以下几部分:
- <html>为文档的根元素,所有的描述都放在<html></html>内部。
- <head>为文档的头信息,头信息的元素大部分不会在浏览器上显示。
- <body>为文档的正文,其信息会显示到浏览器上。
<head>部分包括<title><script><style>三部分,分别是网页的标题、引入的脚本和样式。
1.2.2 XML简介
XML(eXtensible Markup Language)指可扩展标记语言。类似于HTML,它主要用来传递数据,不是显示数据。XML里的标签都是自己定义的。
1.2.3 使用XPath进行元素定位
XPath是在XML文档中查找信息的一种语言,可用来在XML文档中对元素和属性进行导航。XPath是W3C XSLT标准的主要元素,并且XQurey和Xpointer都构建于XPath表达之上。因此,XPath的理解是很多高级XML应用的基础。
XPath使用路径表达式来选择XML文档中的节点或者节点集,这些路径表达式和常规的计算机文件系统中看到的表达式非常相似。
最常用的XPath语法有以下几种:
- 以斜线"/"开始,该路径表示到一个元素的绝对路径。如:/AAA :选择根元素AAA /AAA/ddd:选择根元素下的子元素ddd;
- 以双斜线"//"开始,该路径表示选择文档中满足双斜线"//"之后规则的元素(无论层次关系)。如://BBB:选择所有的BBB元素 /AAA//BBB:选择所有父元素是AAA的BBB元素
- 以星号*开始,该路径表示选择所有由星号之前的路径所定位的元素。如:/AAA/CCC/DDD/* :选择所有路径依附于/AAA/CCC/DDD的元素 /*/*/BBB:选择所有的有2个祖先元素的BBB元素 //*:选择所有的元素
- 方括号中的表达式可以进一步限定元素,其实数字表示元素在选择集中的位置,而last()函数则表示选择集中的最后一个元素。如:/AAA/BBB[1]:选择AAA的第一个BBB子元素 /AAA/BBB[last()]:选择AAA的最后一个BBB子元素
- 可以通过前缀@来指定属性。如 //@id:选择所有的id属性 //BBB[@id]:选择有id属性的BBB元素 //BBB[@name]:选择有name属性的BBB元素 //BBB[@*]:选择有任意属性的BBB元素 //BBB[not(@*)]:选择没有属性的元素
- 属性的值可以用来作为选择的准则。如://BBB[@id='b1']:选择含有属性ID且值为"b1"的元素
- 可以使用分隔符|将多个路径合并在一起。如://ccc|//bbb:选择所有的ccc和bbb元素 /AAA/EEE|//BBB:选择所有的BBB元素和所有是AAA的子元素的EEE元素 /AAA/EEE|//DDD/CCC|/AAA|//BBB:可以合并路径数目没有限制