350 likes | 804 Views
Selenium 简述. Xu.zhibin@Covics. Selenium 介绍. Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工具。Selenium使用JavaScript和Iframes在浏览器嵌入自动化测试引擎,可以在任何支持JavaScript的浏览器中进行工作,模拟用户在浏览器中进行的操作。 主要包括三个部分 Selenium-IDE, Selenium-Core, Selenium-RC 。它可以被用于单元测试,回归测试,冒烟测试,集成测试,验收测试,并且可以运行在各种浏览器和操作系统上。.
E N D
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-Core Selenium-Core是使用JS和DHTML编写的,由于存在一个同源策略的问题,所以在进行测试部署的时候必须将所测试程序部署在服务器端(selenium-ide由于是firefox的一个插件,不受限制)。例如你无法采用selenium-core来测试www.google.cn。如果要对其进行测试,你必须将selenium-core及其测试程序部署在服务器端。 Selenium有两种运行模式,test-runner和dirven。而Selenium-core就是test-runner运行方式。 Selenium test runner 脚本,也称测试用例(test case),是用 HTML语言通过一个简单的表布局编写的。
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的工作原理 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 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(manager@ericsson.com); 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","manager@ericsson.com"); selenium.type("password","manager"); selenium.click("loginButton"); }
实例-Selenium IDE的使用 安装Selenium IDE,并开始录制。 在地址栏输入:http://www.baidu.com/ 登陆百度首页后,在查询框输入“hyddd”。 按“百度一下”按钮 进入搜索结果页面后,右键单击第一条记录(即:hyddd - 博客园),在右键弹出菜单中,单击“Verify TestPersent hyddd - 博客园”。 单击第一条记录(即:进入hyddd - 博客园) Firefox 弹出一个新Tab 页面,并进入了我的博客。 结束录制。
实例- 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