引言
如同你在Selenium项目简史中读到的,Selenium RC长期以来是主Selenium项目,在WebDriver/Selenium合并产生Selenium 2.0,这个最新和更强大的工具以前。
Selenium 1 仍然被积极地支持(主要地在维护模式)并提供某些在Selenium 2.0暂时不可得到的某些特征,包括对几个语言(Java,Javascript,Ruby,PHP,Python,Perl和C#)以及对几乎所有的浏览器的支持。
Selenium RC是如何工作的
首先,我们描述Selenium RC的组件如何运转,以及每一个在运行你的测试脚本中的角色。
RC组件
Selenium RC组件是:
- 启动和杀死浏览器的Selenium服务器,解释和运行由测试程序传递的Selenese命令,和作为一个HTTP代理,解释和验证在浏览器和AUT之间传递的HTTP消息。
- 客户端库提供每种编程语言和Selenium RC服务器之间的接口。
此处是一个简单的架构图...
此图显示客户端库与服务器通讯,传递每个用于执行的Selenese命令。然后服务器使用Selenium 核心JavaScript命令传递Selenium命令到浏览器。浏览器使用它的JavaScript解释器,执行Selenium命令。这将运行你在你的测试脚本中指定的Selenese动作或验证。
Selenium服务器
Selenium服务器接受来自你的测试程序的Selenium命令,解释它们,并将运行这些测试的结果报告回你的程序。
RC服务器打包Selenium内核,并且自动注入到浏览器。这将在你的测试程序打开浏览器时发生(使用一个客户端库API函数)。Selenium内核是一个JavaScript程序,实际上是使用浏览器内置的JavaScript解释器解释和执行Selenium命令的一套JavaScript函数。
服务器使用简单的HTTP GET/POST请求接受来自你的程序的Selenese命令。这意味着你可以使用任何一种可以发送HTTP请求的编程语言,在浏览器上去自动化Selenium测试。
客户端库
客户端库提供允许你从你自己设计的程序运行Selenium命令的编程支持。每一个支持的语言,有一个不同的客户端库。一个Selenium客户端库提供一个编程接口(API),也就是,一套函数,可以从你自己的程序运行Selenium命令。在每个接口,有一个编程支持每个Selenese命令的编程函数。
客户端库取得一个Selenese命令,并传递它到Selenium服务器,用于处理对要测试的应用程序(Application Under Test - AUT)的一个指定的动作或测试。客户端库也接受命令的结果并传递回你的程序。你的程序可以接受这个结果并存储它到一个程序变量和报告做一个成功或失败,或可能采取校正措施,如果它是一个未预期的错误。
如此创建一个测试程序,你仅需编写一个使用客户端库API的,运行一套Selenium命令的程序,并且,可选地,如果你已经有一个在Selenium IDE创建的Selenese测试脚本,你可以生成Selenium RC代码。Selenium IDE可以转换(使用导出菜单项)它的Selenium命令到一个客户端驱动程序的API函数调用。详见Selenium IDE一章,有关从Selenium IDE导出RC代码的部分。
安装
安装对Selenium来说,有点用词不当。Selenium有一组可得到的库,用于你选择的编程语言。你可以从下载页面下载它们。
一旦你选择了一个工作语言,你仅仅需要:
- 安装Selenium RC服务器。
- 用语言特定的客户端驱动程序建立一个编程项目。
安装Selenium服务器
Selenium RC服务器只是一个Java的jar文件(selenium-server-standalone-<版本号>.jar),不需要任何特定的安装。只需下载这个zip文件,然后抽取服务器到期望的目录就足够。
运行Selenium服务器
在开始任何测试前,你必须启动服务器。到Selenium RC服务器安装的目录,然后从命令行控制台运行下面的命令。
java -jar selenium-server-standalone-<version-number>.jar可以简化,通过创建一个批或Shell可执行程序(.bat在Windows,.sh在Linux)包含上面的命令。然后在桌面准备一个指向可执行文件的快捷方式,并且简单地双击这个图标启动服务器。
为了服务器的运行,你需要安装Java和正确地配置Path环境变量。你可以在控制台通过运行下面的命令,检查是否你有正确安装的Java。
java -version如果你得到一个版本号,你已经准备好开始使用Selenium RC。
使用Java客户端驱动程序
- 从SeleniumHQ下载页面,下载Selenium java客户端驱动程序zip。
- 抽取selenium-java-<版本号>.jar文件。
- 打开你期望的Java IDE(Eclipse,NetBeans,Intellij,Netweaver,等等)。
- 创建一个java项目。
- 增加selenium-java-<版本号>.jar文件的引用到你的项目。
- 将selenium-java-<版本号>.jar文件 增加到你的项目的类路径
- 从Selenium IDE导出一个脚本到一个Java文件,并包含在你的Java项目中,或直接使用Selenium Java客户端API编写你的Selenium测试。API在本章的稍后介绍。你可以要么使用JUnit,或者TestNG来运行你的测试,或者你可以编写你自己的简单main()程序。这些概念在本章的后面有解释。
- 从控制台运行Selenium服务器。
- 执行你的测试从Java IDE或从命令行。
有关Java 测试项目配置的详细信息,参见附录节在Eclipse配置Selenium RC和在Intellij配置Selenium RC。
使用Python客户端驱动程序
- 通过PIP安装Selenium,在SeleniumHQ下载页有使用说明的链接。
- 要么用Python编写你的Selenium测试,或从Selenium IDE导出 脚本到一个Python文件。
- 从控制台运行Selenium服务器。
- 从控制台执行你的测试,或你的Python IDE
有关Python客户端驱动器配置的详细信息,参见附录的Python客户端驱动程序配置。
使用.NET客户端驱动程序
- 从Selenium下载页面,下载Selenium RC。
- 抽取到文件夹。
- 下载和安装NUnit(注释:你可以使用NUnit做你的测试引擎。如果你还不熟悉NUnit,你也可以编写一个简单的main()函数去运行你的测试;不管怎样NUnit是一个非常有用的测试引擎。)
- 打开你期望的.NET IDE(Visual Studion, SharpDevelop,MonoDevelop)
- 创建一个类库(.dll)
- 增加对下面的DLL的引用:nmock.dll,nunit.core.dll,nunit. framework.dll,ThoughtWorks.Selenium.Core.dll,ThoughtWorks.Selenium.IntegrationTests.dll和ThoughtWorks.Selenium.UnitTests.dll
- 使用一个.NET语言(C#或VB.NET)编写Selenium测试,或从Selenium IDE导出脚本到一个C#文件,然后复制代码到你刚刚创建的类文件。
- 编写自己的简单main()程序或你可以包含NUnit在你的项目中运行你的测试。这些概念在本章稍后说明。
- 从控制台运行Selenium服务器
- 运行你的测试从IDE,从你的NUnit GUI或从命令行。
在Visual Studio中配置.NET客户端驱动程序的特定详细信息,参见附录的.NET客户端驱动程序配置
使用Ruby客户端驱动程序
- 如果你还没有RubyGems,从RubyForge安装它。
- 运行gem安装selenium-client。
- 在测试脚本的顶部增加需要的"selenium/client"
- 使用任何Ruby测试工具编写测试脚本(例如Test::Unit,Mini::Test或RSpec)
- 从控制台运行Selenium RC服务器
- 以你运行任何其它的Ruby脚本相同的方式执行你的测试
有关Ruby客户端程序的详细信息,参见Selenium-Client文档
从Selenese到一个程序
为了使用Selenium RC,这主要的任务是转换你的Selenese到一个编程语言。在本节,我们提供几个不同的语言特定的示例。
样品测试脚本
让我们从一个Selenese测试脚本示例开始。想象一下用Selenium IDE记录下面的测试。
open /注释:这个示例使用Google搜索引擎页http://www.google.com
作为一个编程代码的Selenese
这是导出到每一个支持的编程语言的测试脚本(通过Selenium IDE)。如果你至少有面向对象编程语言的基本知识,你会理解Selenium如何运行Selenese命令,通过阅读下面的这些示例中的一个。要以一个特定的语言查看示例,选择这些按钮中的一个。
在下一节,我们会解释如何去构造一个测试程序,使用生成的代码。
编写你的测试
现在我们将演示如何编写你自己的测试,使用示例以支持的每一种编程语言。基本上有两个任务。
- 从Selenium IDE生成你的脚本到一个编程语言,可选地修改结果
- 编写一个非常简单的main程序执行生成的代码。
可选地,你可以采用一个测试引擎平台,像Java的JUnit或TestNG,或.NET的NUnit,如果你使用这些语言中的一种。
在这里,我们展示语言特定的示例。语言特定的API常常是彼此不同的,因此你可以为每一个找到各自的解释。
•Java对Java,人们要么使用JUnit或TestNG作为测试引擎。某些开发环境,像Eclipse有对这些插件的直接支持。这使它更容易使用。讲授JUnit或TestNG超出了本文档的范畴,相关材料可以在线获得,也有可得到的出版物。如果你在一个使用Java的机构里,你的开发人员已经有这些测试框架中的一个的使用经验。
你可能想要重命名测试类,将“NewTest”改成你自己选择的某个名称。同样你需要改变在下面的语句中的浏览器打开参数。
Selenium IDE生成的代码看起来像这个。示例有手工增加的注释,用于附加的澄清。
// 指定测试包
// 这是驱动程序的导入。你将使用这个实例化一个浏览器,并让它做你要求的。
// Selenium IDE增加一个Pattern模块。因为有时需要使用它进行正则表达式验证。
// 如果你使用它,你可以移除
// 我们创建我们的Selenium测试案例
// 实例化和启动一个浏览器
}// 这些是测试步骤
}.NET客户端驱动程序与Microsoft.NET一起工作。可以与任何.NET测试框架,如NUnit或Visual Studio 2005 Team System。
Selenium IDE假定你使用NUnit作为你的测试框架。在下面生成的测试代码中,你可以看到。它包括用于NUnit的using语句,以及响应的NUnit属性,标识测试类中每一个成员函数的角色。
你可能想要重命名测试类,将“NewTest”改成你自己选择的某个名称。同样你需要改变在下面的语句中的浏览器打开参数。
selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com/");生成的代码看起来类似于这个。
你可以允许NUnit去管理你的测试的执行。或替代地,你可以编写简单的main()程序,实例化测试对象和依次运行三个方法中的每一个SetupTest(),TheNewTest(),和TeardownTest()。
PythonPyunit是使用于Python的测试框架,要学习Pyunit,参考它的官方文档。
基本的测试结构是:
Selenium IDE生成适当的Ruby代码,但需要老的Selenium gem。因为Selenium的官方Ruby驱动程序是Selenium-Client gem,而不是老的Selenium gem。实际上,Selenium gem已经停止继续开发。
因此,建议更新任何IDE生成的Ruby脚本如下:
1、在行1,改变必须的“selenium”到必须的“selenium/client”
2、在行11,改变Selenium::SeleniumDriver.new到Selenium::Client::Driver.new
你可能也想要改变类名称到比"Untitled"包含更多意义的某个名称,并改变测试方法的名称"test_untitled".
这里是一个,上面描述的,由Selenium IDE生成的Ruby代码修改而创建的简单示例。
Perl, PHP文档团队的成员还没有用Perl或PHP语言使用过Selenium RC。如果你正用这两种语言中的一种使用Selenium RC,请联系文档团队(参见做出贡献一章)。我们很愿意包含来自你的某些示例或经验,以支持Perl和PHP用户。