Transcript Selenium简述
Selenium简述
Xu.zhibin@Covics
Selenium介绍
Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工
具。Selenium使用JavaScript和Iframes在浏览器嵌入自动化测试
引擎,可以在任何支持JavaScript的浏览器中进行工作,模拟用
户在浏览器中进行的操作。
主要包括三个部分Selenium-IDE, Selenium-Core, Selenium-RC 。
它可以被用于单元测试,回归测试,冒烟测试,集成测试,验
收测试,并且可以运行在各种浏览器和操作系统上。
selenium [si'li:niəm]
Selenium优势
它是开源的
简单,易于安装,易于工作
Selenium支持多种浏览器,能够运行于多种操作系统,因此更
容易帮助测试人员发现应用程序在不同浏览器上的兼容性问题。
通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性;
通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户
的角度来测试应用程序;可以操作 Web 页面上的各种元素,诸
如:点击按钮、输入文本框,以及断言 Web 页面上存在某些文
本与 Web 元素等。
Selenium优势
提供Selenium IDE ,一个FireFox plugin,能自动记录用户的操作,
生成测试脚本。生成的测试脚本可以用Selenium Core手工执行,
也能基于Selenium RC放入Java,C#,Ruby的单元测试用例中自
动运行;
测试用例调用实际的浏览器(如IE、FireFox)来执行测试。和有
些开源方案自行实现Web解释引擎相比,实际的浏览器能模拟
更多用户交互和JS语法。
Selenium命令
Selenium命令分成两类 —— 操作(action)和断言(assertion)
操作:模拟用户与 Web 应用程序的交互。
如:单击一个按钮(selenium.click(locotar))和填
(selenium.type(locotar,value))一个表单,这些都是常见的用户操
作,可以用 Selenium 命令来自动化这些操作。
断言:验证一个命令的预期结果。常见的断言包括验证页面内
容或当前位置是否正确。
如:assertEquasl(selenium.getTitle(),”QQview”);验证页面上的
title是否为QQview
Selenium模式
Selenium可按两种模式来使用:test runner(selenium-core)和
driven(selenium-rc)。
这两种模式在复杂性和编写方式方面有所不同:
Driven 测试脚本编写起来往往要更复杂一些,因为它们是用编
程语言编写的。但是如果使用 Python 或 Ruby 之类的高级动态
编程语言,那么这种复杂性方面的差异就很小。
两种模式之间最大的不同点在于:
如果使用 driven 脚本,测试有一部分在浏览器之外运行,而如
果使用 test runner 脚本的话,测试是完全在浏览器中运行的。
不管是 test runner 还是 driven 测试用例,都可以与持续集成工
具集成。
Selenium组成
Selenium IDE:
是一个测试集成开发环境,是Firefox的附加组件,结合Firefox
可以实现录制、编辑和调试测试脚本,并在浏览器中模拟用户
真实操作进行回放。Selenium IDE不只是录制工具:是完整的
IDE。可以录制,或者手工写脚本。
Selenium Core:
使用Selenium Core,需要部署到web服务器上,才可以测试。
这说明,使用Selenium Core(使用纯DHTML/JavaScript)不能
编写测试比如google.com。因为Selenium Core是纯
DHTML/JavaScript的,受到客户端JavaScript的安全限制。这是
JavaScript安全需求。如果不能修改要测试的webserer,
Selenium Core不是合适的测试工具。需要使用Selenium IDE或
者Selenium RC替代。
Selenium组成
Selenium RC:
即Selenium Remote Control。Selenium RC提供了一个代理服务
器,允许用程序语言编写测试用例,如C#,Python等。这样做的
好处是,可以把Selenium和其他测试框架(如Nunit)进行集成
测试。 Selenium RC主要包含了下面几部分:
a. Selenium核心。
b. Selenium Server运行时环境。
c. Selenium提供的针对各种语言的开发接口。
Selenium核心和Server运行时环境都放在selenium-server.jar中。
Selenium Grid:
允许同时并行地、在不同的环境上运行多个测试任务,极大地
加快Web 应用的功能测试。
Selenium-IDE(仅支持firefox)
Selenium-IDE是用于selenium测试的一个集成测试工具,他被嵌
套在firefox中,作为firefox的一个组件来使用。并且通过它,测
试人员可以录制在web界面上的一切操作,并且进行编辑,调
试和快速回放,就像用户在操作一样。
特点
非常容易在页面上进行录制和回放
能自动通过id,name和xpath来定位页面上的元素
自动执行selenium的命令
能够进行调试和设置断点
录制生成的脚本能够转化成各种语言
在每个录制的脚本中能够加入断言
Selenium-IDE使用
在操作系统上安装firefox(3.6以上),登陆
(http://seleniumhq.org/download/)下载selenium-IDE。
下载后,在FireFox中打开插件文件selenium-ide.xpi进行安装,
重新启动FireFox后,可选择菜单“Tools | Selenium IDE”打开
Selenium IDE的界面。
点击IDE插件上的红色按钮进行录制,然后你可以按照你的要
求在WEB界面上进行操作,IDE会自动录制下你的操作,手工
编辑脚本是通过选择和插入Selenium命令(Command)的方式
来实现的。可直接在FireFox中运行测试脚本,也可调出
TestRunner界面来执行测试脚本 。
生成的脚本可以转化成各种高级语言脚本,点击options-》
format来转换成其他高级语言。如format菜单不可用,则点击
Options菜单,将“Enable experimental features”选上。
Selenium-IDE使用
Selenium-Core
Selenium-Core是使用JS和DHTML编写的,由于存在一个同源策
略的问题,所以在进行测试部署的时候必须将所测试程序部署
在服务器端(selenium-ide由于是firefox的一个插件,不受限
制)。例如你无法采用selenium-core来测试www.google.cn。如
果要对其进行测试,你必须将selenium-core及其测试程序部署
在服务器端。
Selenium有两种运行模式,test-runner和dirven。而Seleniumcore就是test-runner运行方式。
Selenium test runner 脚本,也称测试用例(test case),是用
HTML语言通过一个简单的表布局编写的。
Selenium-Core
Selenium-RC
Selenium-RC可以使用高级语言来编写web页面测试脚本,编写
的脚本可以运行在任何支持js的浏览器中。
Selenium-RC包括两部分:
Selenium Server
Selenium Server主要控制浏览器行为,总的来说,Selenium
Server由三部分组成:Launcher、Http Proxy、Selenium Core,
其中Selenium Core是在Selenium Server启动浏览器时,嵌入到
浏览器中的。Selenium Core是一堆Javascript函数集合,当
Selenium RC通过网络与 Selenium Server通讯时(通过简单的
Http Get或Post请求),Selenium Server解析客户端请求为
Selenese Command,然后就会调用相应的JS函数来控制浏览器
操作。
Selenium-RC
Selenium Libraries
写测试案例时主要控制Selenium Server库,客户端提供了编程
接口,允许你可以通过编程运行Selenium命令,Client Libraries
为每一种编程语言提供了与Selenium RC 服务器通讯的编程接
口。一个Selenium客户端类库实际上时提供一套函数集合,你
可以通过运行你的测试程序来运行Selenium Command,类库中
的每一个接口都是和Selenium Command一一对应的。
客户端类库通过发送一个Selenium Command与Selenium Server
通讯,从而使被测应用程序执行相应的操作。客户端类库接收
到Selenium Command命令返回的结果,并把结果返回给应用程
序并赋值给相应的变量。
注:可以通过Selenium IDE生成Selenium-RC代码。
Selenium-RC
Selenium-RC的工作原理
Selenium-RC的工作原理
1. Testcase通过client lib向server发送http请求,要求和selenium
server建立连接。
2. Selenium server上的Laucher启动浏览器,把selenium core加载到
浏览器,并且把浏览器的代理设置为selenium server的http
proxy。
3. Testcase通过client lib向server发送http请求,server将请求进行解
析,然后通过http proxy发送js命令通知selenium core执行浏览
器动作。
4. Selenium core接收到指令后执行动作。
5. 浏览器接收到新页面请求信息后发送http请求下载新web页面
6. Selenium server接收到浏览器的http请求后自己重组http请求,
获取相应的web页面。
7. Selenium server的http proxy把web页面返回给浏览器。
Selenium-RC
为什么要使用代理
同源:域名、协议、端口相同
同源策略:由Netscape提出。只有当js脚本与请求的web页面同
源时,js才会被执行
Selenium-RC 为什么要使用代理
Selenium-RC 为什么要使用代理
Selenium
API-Commands (命令)
Element Locators (元素定位器)
String Matching Patterns (字符串匹配模式)
Select Option Specifiers (Select 选项指定器)
Actions 描述了用户所会作出的操作
Action 有两种形式: action 和actionAndWait, action 会立即执行,
而actionAndWait 会假设需要较长时间才能得到该action的相响,
而作出等待,open 则是会自动处理等待时间。
Assertions 允许用户去检查当前状态
两种模式: Assert 和Verify, 当Assert 失败,则退出测试;当
Verify 失败,测试会继续运行。
Parameters and Variables
参数和变量的声明范围由简单的赋值到JavaScript表达式赋值。
WebDriver
selenium2.0 =selenium1.x+ webdriver
Selenium2.0 WebDriver入门指南
http://my.oschina.net/willSoft/blog/28119
优点
◦ 更优雅的语法
◦ 不需要Server
◦ 多框架,多浏览器窗口,弹出框,警告窗口 ?
◦
页面导航 ?
◦
拖动 ?
◦
基因Ajax的UI元素 ?
缺点
◦ 不支持Selenium-Grid
WebDriver
API 与 SeleniumRC API
WebDriver API写的Login脚本
public void login() {
driver.switchTo().defaultContent();
driver.switchTo().frame("mainFrame");
WebElement eUsername= waitFindElement(By.id("username"));
eUsername.sendKeys([email protected]);
WebElement ePassword= waitFindElement(By.id("password"));
ePassword.sendKeys(manager);
WebElement eLoginButton = waitFindElement(By.id("loginButton"));
eLoginButton.click();
}
WebDriver
API 与 SeleniumRC API
SeleniumRC API写的Login脚本
public void login() {
selenium.selectFrame("relative=top");
selenium.selectFrame("mainFrame");
selenium.type("username","[email protected]");
selenium.type("password","manager");
selenium.click("loginButton");
}
实例-Selenium
IDE的使用
安装Selenium IDE,并开始录制。
在地址栏输入:http://www.baidu.com/
登陆百度首页后,在查询框输入“hyddd”。
按“百度一下”按钮
进入搜索结果页面后,右键单击第一条记录(即:hyddd 博客园),在右键弹出菜单中,单击“Verify TestPersent
hyddd - 博客园”。
单击第一条记录(即:进入hyddd - 博客园)
Firefox 弹出一个新Tab 页面,并进入了我的博客。
结束录制。
实例-Selenium IDE的使用
实例-Selenium IDE的使用
实例-Selenium IDE的使用
实例- Selenium RC 测试案例
将前面Selenium IDE 录制的脚本转为其他语言的脚本,以C#为
例。转换后的脚本默认使用NUnit 测试框架。
实例Selenium RC 测试案例
1. 建立测试项目 SeleniumTest
2. 导入DLL 引用
nunit.framework
ThoughtWorks.Selenium.Core.dll
实例Selenium RC 测试案例
3. 把前面自动生成的代码修改一下
实例Selenium RC 测试案例
4. 启动Selenium 测试服务器
打开cmd 进入selenium-server-1.0-beta-2目录,输入“java –
jar selenium-server.jar”(需要先安装JRE),启动Selenium
测试服务器。
实例Selenium RC 测试案例
5. 运行测试案例
It’s Over,Yeah
Thank You
Bye Bye