1. 入门
入门:http://www.yiibai.com/selenium/selenium_ide.html
视频入门:http://pan.baidu.com/s/1eQppsWE
注 : web自动化工具(如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等)的原理:
通过调用IE COM接口和HTML DOM 对浏览器以及WEB测试对象的操作。
2. 入门知识
(1) Selenium真的不是一个单一的工具,而是一套工具,帮助测试者更有效地基于Web的应用程序的自动化。 重点提供了API.
(2) selenium套件:
工具 |
描述 |
Selenium IDE |
Selenium 集成开发环境(IDE)是一个Firefox插件,可以让测试人员跟着,需要测试的工作流程,以记录他们的行为。 |
Selenium RC |
Selenium远程控制(RC)为旗舰测试框架,它允许多个简单的浏览器动作和线性执行。它使用的编程语言,如Java,C#,PHP,Python和Ruby和Perl的强大功能来创建更复杂的测试。 |
Selenium WebDriver |
Selenium的webdriver前身是Selenium RC,直接发送命令给浏览器,并检索结果。 |
Selenium Grid |
Selenium网格用于运行在不同的机器,不同的浏览器同时以最小化执行时间的并行测试的工具。 |
(3) selenium 演变
selenium 1 (多种浏览器,多种语言支持;)----> webDriver(编码结构更好)
webDriver----------------------------------> selenium 2
优点:
Selenium |
QTP/UFT |
Selenium 是一种开源工具。 |
QTP是一个商业工具和成本涉及许可证。 |
可以扩展它公开DOM各种技术。 |
有限的附加组件和需要附加组件的技术。 |
可以在不同浏览器执行脚本。 |
可以运行测试在Firefox,IE和Chrome浏览器的特定版本。 |
可以执行各种操作系统的脚本。 |
仅适用于Windows操作系统。 |
支持的移动设备。 |
支持第三方工具的移动设备。 |
执行在浏览器中测试,这不是必需的,重点是脚本执行的进度。 |
脚本执行的工具作用于浏览器(模拟用户操作)过程中需要重点 |
可以并联使用Selenium网格运行测试。 |
QTP不能并行执行测试,但与质量控制整合QTP允许测试并行执行。质量控制也是一种商业工 |
缺点:
Selenium |
QTP/UFT |
仅支持基于Web的应用程序。 |
可以测试Web和桌面应用程序。 |
任何功能部件,例如对象存储库/恢复方案 |
QTP已经或和恢复方案内置。 |
没有IDE,所以这样的脚本开发,不会快于QTP。 |
更直观的IDE,自动化,可以实现更快。 |
不能在浏览器中访问控制 |
可以在浏览器中访问控制,如收藏夹栏,后退和前进按钮。 |
没有默认生成测试报告。 |
默认的测试结果生成工具中。 |
用于参数设置,用户必须依赖于编程语言 |
参数是内置的,易于实现。 |
(4)selenium 术语
selenium core : js 框架
IDE : 火狐插件
RC: 服务端和 客户端
webDriver : selenium 2的核心 + API + 不需要再显示的启动 selenium Server + 支持的脚本(java + C# + python等等)
grid : 分布执行测试
(5) 如何选择工具
IDE : 入手很快。 初期投入时间少, 但一旦变化, 可能需要做比API调用更多 的 工作 。
webDriver : 需要脚本编写,API的调用。
推荐: 可以从IDE入手, 对code熟练后, 引入 webDriver 的API . 或直接学习API..
注 : 学习 webDriver 时, 需要的知识: js , java, python等等
3. 如何入手
3.1 selenium webDriver分类
firefox Driver (默认的Driver)
IE Driver
chrome Driver
safari
android
3.2 步骤
step 1 : 创建一个webDriver对象-控制浏览器
step 2 : 创建webElement对象-操作页面元素
3.3 页面元素定位方法
ClassName
CssSelector
Id
LinkText
PartialLinkText
Name
TagName
Xpath
注 : 还有 jquery selector
3.4 验证
验证 方法
page title getTitle(); assertEquals
Attributes getAttribute();assertNotNull
JavaScript 返回值 IJavaScriptExecutor
3.5 verify 与 assert 差异
verify : 一旦运行失败, 会继续往下执行。一个case 可以有多个verify.
assert : 一旦运行失败, 抛出异常,停止继续执行。一个case 一般只有一个assert.
3.6 测试代码定时运行
持续集成工具--jenkins CI
系统定时任务-commands
4. 实践
4.1 环境配置
下载并安装Java
下载并配置Eclipse
配置Firebug和FirePath
配置Selenium RC
配置Selenium的webdriver
具体参考: http://www.yiibai.com/selenium/selenium_environment_setup.html
4.2 什么是Selenium - RC
Selenium-RC意思是Selenium的远程控制(又称Selenium1.0),允许我们编写的编程语言,webdriver更强大和稳定,二者整合为selenium 2.0
早期的Selenium使用的是Javascript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的:自动化Web操作。
这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。
(采用Javascript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。它采用Javascript单元测试工具JSUnit为核心,模拟真实用户操作,包括浏览页面、点击链接、输入文字、提交表单、触发鼠标事件等等,并且能够对页面结果进行种种验证。)
参考: http://www.yiibai.com/selenium/selenium_rc.html
4.3 什么是 Selenium Webdriver
webdriver自动化俗称Selenium 2.0测试Web应用程序工具。 webdriver使用不同的底层框架,Selenium 遥控器使用JavaScript的Selenium 核嵌入式已经在有一定的局限性的浏览器中。 webdriver直接交互而不与Selenium 远程控制,依赖于服务器上的任何中介的浏览器。
在Selenium开发者社区努力下,不断提高Selenium webdriver与Selenium的整合。
当Selenium2.x 提出了WebDriver的概念之后,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。(甚至包括了AndroidDriver和iOS WebDriver)
WebDriver Wire协议是通用的,也就是说不管是FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。例如FirefoxDriver初始化成功之后,默认会从http://localhost:7055开始,而ChromeDriver则大概是http://localhost:46350之类的。接下来,我们调用WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上是一个HTTP request给监听端口上的Web Service。在我们的HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做社么事情。
在我们new一个WebDriver的过程中,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配。接着就在目标浏览器里启动一整套Web Service,这套Web Service使用了Selenium自己设计定义的协议,名字叫做The WebDriver Wire Protocol。这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等等等等。
参考:
http://www.yiibai.com/selenium/selenium_webdriver.html
http://blog.csdn.net/hhb200766/article/details/6757742
http://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html
4.4 Selenium TestNG
http://www.yiibai.com/selenium/selenium_test_ng.html