posts - 28,  comments - 56,  trackbacks - 0
参考http://blog.chinaunix.net/u/29273/showart_280459.html
本篇文章部分转载自 凤凰印记 的 BLOG,地址如上,略做修改,应该是Selenium RC官方参考手册的中文翻译版本:
原版(英文):http://selenium-rc.openqa.org/tutorial.html


Selenium Remote Control:指南

下载Selenium RC 包:http://selenium-rc.openqa.org/
是一个Zip包,里面提供了支持各种语言的驱动。核心的是 selenium-server.jar 这个jar包,在下文介绍交互模式(Interactive Mode)时用到的就是它。

本指南将会告诉你如何从命令行启动Selenium server,如何在交互式模式下使用Server。这里假设你已经熟悉在命令行执行程序。最后,我们将说明如何写简单的test来实现我们已在交互式模式下实现的功能。

一些准备:JRE1.5+ 和 浏览器要求

Selenium Server 是用Java语言编写的,需要在JRE 1.5.0或者更高的版本下运行。也许你已经安装JRE,在命令行中执行:
java -version

你可以看到如下的关于你安装的java的版本信息:

java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)
 

相反,如果你看到的是错误信息,你需要安装JRE,或者是将它填加到你的PATH环境变量中去。

同时你需要确保你的安装的浏览器也支持这些,例如:

Windows
如果你用的是Windows XP 或者是Windows2003,你可以使用IE 浏览器,或者安装Mozilla Firefox 或者Opera浏览器。
如果你是用的是Windows2000,如果想使用IE浏览器,你就需要安装reg.exe,但是如果使用Firefox不需要。我们建议(但不是必须)将你的浏览器执行路径加到你的PATH环境变量中(如果你不知道如何将你的浏览器安装目录加到PATH中,那么你就必须将你的浏览器安装到标准路径下:Firefox的标准路径:"c:\Program Files\Mozilla Firefox\firefox.exe";IE浏览器的标准路径:"c:\Program Files\Internet Explorer\iexplore.exe")

Unix/Linux
在这个指南中,要求安装Firefox,并且将它的路径加到你的PATH环境变量中。注意,在Unix/Linux中我们激活"firefox-bin"目录,从而确保在这个路径下执行;同时不要忘记将Firefox libraries 加到你的 LD_LIBRARY_PATH中。如果需要,我们可以通过shell脚本激活firefox(例如:"firefox" or "run-mozilla.sh")那样的话知道你关闭这个服务器的时候才可以结束Firefox浏览器。

Mac OS X
对于 Mac OS X,只要在你的/Applications目录下,安装Firefox.app就够了。注意:为了精确控制你的浏览器,我们需要激活Applications/Firefox.app/Contents/MacOS 目录下的Firefox内嵌的执行程序(firefox-bin);如果你的浏览器的安装位置不在那,你需要将你当前的内嵌位置加到你的PATH路径下,作为你的DYLD_LIBRARY_PATH环境变量。

交互模式:Interactive Mode


Selenium服务器的“交互模式”是一种不需要任何代码的原型测试,因此有必要对初学者介绍Selenium Remote Control。在交互模式下,你可以在Selenium 服务器窗口中输入一行行的命令,在工作窗口的某个位置中立刻会执行你命令的结果。通常你可以选用你喜欢的语言编写你的测试代码,整个过程都是完全自动化的。

确保Java安装正常,通过命令行的方式用如下的命令来启动你的Selenium Server:

java -jar selenium-server.jar -interactive

这个命令将启动Selenium服务器,并允许你在命令窗口输入命令。在一些登录信息后边,你应该看到如下的信息:

Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http://www.yahoo.com)

让我们开始学习Selenium 服务器,第一个命令是打开浏览器,在Windows操作系统下,在命令窗口下试试输入下面的命令:

cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com

如果你想使用FireFox浏览器,你可以试如下的命令:

cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com

这句话的意思是:执行getNewBrowserSession命令,选择一个浏览器(*iexplore for Internet Explorer, *firefox for Firefox, or *opera for Opera)打开www.google.com网站。在窗口中输入这条命令,会自动的将HTTP网页的请求发送给Selenium服务器,你可以看到关于你的请求的如下描述:

--->Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com

如果一切正常,你将会发现在你选择的浏览器中打开了一个新的窗口,回到Selenium服务器窗口中,你会发现如下的信息:

Got result: OK,260113 on session 260113

(如果没有以上信息,请参考故障指南

消息的第一部分“Got result: OK”表示你的请求成功,第二部分,是Session 的ID,每次执行"getNewBrowserSession" 命令时,Session的ID都是不同的。


在我的机器上的CMD窗口,蓝色是我输入的,其他是LOG
D:\sele\selenium-remote-control-0.9.2-dist\selenium-remote-control-0.9.2\seleniu
m-server-0.9.2>java -jar selenium-server.jar -interactive
15:30:51.132 INFO - Java: Sun Microsystems Inc. 1.5.0_04-b05
15:30:51.132 INFO - OS: Windows XP 5.1 x86
15:30:51.132 INFO - v0.9.2 [2006], with Core v0.8.3 [1879]
15:30:51.382 INFO - Version Jetty/5.1.x
15:30:51.397 INFO - Started HttpContext[/,/]
15:30:51.397 INFO - Started HttpContext[/selenium-server,/selenium-server]
15:30:51.397 INFO - Started HttpContext[/selenium-server/driver,/selenium-server
/driver]
15:30:51.475 INFO - Started SocketListener on 0.0.0.0:4444
15:30:51.475 INFO - Started org.mortbay.jetty.Server@1cb25f1
Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http:/
/www.yahoo.com)
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
15:31:23.341 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
15:31:23.528 INFO - Checking Resource aliases
15:31:23.528 INFO - Command request: getNewBrowserSession[*iexplore, http://www.
google.com] on session null
15:31:24.153 INFO - Launching session 683528
15:31:24.262 INFO - Backing up registry settings...
15:31:25.528 INFO - Modifying registry settings...
15:31:26.012 INFO - Launching Internet Explorer...
15:31:50.786 INFO - Allocated session 683528 for http://www.google.com
15:31:50.817 INFO - Got result: OK,683528 on session 683528
cmd=open&1=http://www.google.com/&sessionId=683528
15:41:46.837 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=open&1=http://www.google.com/&sessionId=683528
15:41:46.853 INFO - Command request: open[http://www.google.com/, ] on session 6
83528
15:41:47.354 INFO - Got result: OK on session 683528
cmd=type&1=q&2=qqqqqq&sessionId=683528
15:42:33.186 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=type&1=q&2=qqqqqq&sessionId=683528
15:42:33.202 INFO - Command request: type[q, qqqqqq] on session 683528
15:42:33.233 INFO - Got result: OK on session 683528


这是IE相应的快照:
 


让我们试一下更多的命令:我们将打开Google的网站,在命令窗口中输入下面的命令,并且将ID换成你运行"getNewBrowserSession"时获得的ID。

cmd=open&1=http://www.google.com/webhp&sessionId=260113

当执行完这个命令后,在你的浏览器窗口的下方将会打开google.com页面。(The /webhp 确保我们在www.google.com网站;否则,我们需要通过某个国家的Google服务器间接的访问Google, 例如., www.google.fr.)

现在Google已经被打开了,我们可以试着在Search Box中输入一些字段,在Selenium 服务器窗口命令中输入:

cmd=type&1=q&2=hello world&sessionId=260113

同样,不要忘记将你的Session ID换成你获得的ID,如果一切按计划执行,你将会在google的search对话框中看到“hello world”,现在让我们开始查询:

cmd=click&1=btnG&sessionId=260113

现在在浏览器中你可以看到查询的结果,你可以通过许多Selenium命令在浏览器中自动执行手工任务,对于一些特殊的命令,你可以在 Openqa的网站上查询Selenium Core部分,或者查看我们客户端驱动的相关资料(Java, .NET, Perl, PHP, Python or Ruby).

接下来我们想做的事情可能是在页面上读出一些我们想要的信息, 例如,让我们在当前页面上找到一些HTML的标题,如下:

cmd=getTitle&sessionId=260113

浏览器将会返回我们载入的HTML页面的标题:

Got result: OK,hello world - Google Search on session 260113

现在这些交互模式已经够了;让我们开始写一些代码!但是在我们开始前,让我们关掉我们启动的浏览器。输入如下的命令:

cmd=testComplete&sessionId=260113

输入这些命令后,你的浏览器窗口将会自动关闭,想要关掉Selenium服务器,输入“quit”或者只要按下“Ctrl+C”。

The Same Origin Policy 同源策略


当你执行你的测试的时候,你也许会注意到你的浏览器种的URL是:

http://www.google.com/selenium-server/RemoteRunner.html?sessionId=260113

这个不是一个普通的URL,因为在www.google.com上并没有这个URL,如果你手工在你的浏览器中输入地址,将会出现404错误页面,怎么回事那?

JavaSript自动测试的时候,Selenium服务器参与解决了一个难题,你自己写的JavaScript脚本不会在Google.com上执行,这是由于Same Origin Policy,同源策略使得JavaScript脚本允许只能阅读/修改来自相同源头的HTML。

这给Selenium自动测试带来了很大问题,如果你写了一个设置测试google.com的.js代码,同源策略拒绝你的.js文件在google.com上运行;相反,你应该在google.com上安装那个.js文件来使它运行,我们没有权利这样做,即使有,这样做也会引起争议。

Selenium Server便应运而生,在你用"getNewBrowserSession"自动开启的浏览器中,.Selenium Server如同是客户端配置的代理(client-configured proxy)。尤其,他将你的浏览器配置成和浏览器相关的使用Selenium Server代理。

代理通常会捕捉你在HTML页面上的行为,如果页面没有找到,将会报告该页不存在。但是Selenium Server是个很不同的代理,当浏览器通过包含"/selenium-server/"的代理在URL中请求某个页面时,Selenium Server不会单纯的在远程服务器上取回该页,而是自动的返回它自己的页面。在某种意义上,这使得浏览器认为远程服务器上包含这个页面,这样我们就可以在google.com上注入任意的JavaScript代码而不用以任何方式修改google.com。

通过程序运行


以上介绍了一点原理和基本的使用方法。很显然,打开一个cmd窗口,一行一行的输入命令,是令人崩溃的事情,并且命令行看起来很不可爱。Selenimu RC的魅力就在于,可以通过程序来实现这样的测试:来看一个Java的例子:
import com.thoughtworks.selenium.*;
import junit.framework.*;

public class GoogleTest extends TestCase {
    
private Selenium browser;
    
public void setUp() {
        browser 
= new DefaultSelenium("localhost",
            
4444"*firefox""http://www.google.com");
        browser.start();
    }
    
    
public void testGoogle() {
        browser.open(
"http://www.google.com/webhp?hl=en");
        browser.type(
"q""hello world");
        browser.click(
"btnG");
        browser.waitForPageToLoad(
"5000");
        assertEquals(
"hello world - Google Search", browser.getTitle());
    }
    
    
public void tearDown() {
        browser.stop();
    }
}

SetUp( )函数,就是交互模式中的 cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com 命令。
testGoogle( ) 函数,更不需要程序员亲自动手编写,Firefox 的 Selenium IDE 插件,可以自动将Selenium html脚本,转换成各种语言(Options->Format)。


就是这么简单,规划测试用例,录test cases,修修改改,贴到代码里面,还需要程序员做什么呢?
posted on 2008-03-06 15:05 Becky 阅读(11061) 评论(12)  编辑  收藏 所属分类: 测试

FeedBack:
# re: Selenium-RC使用介绍
2008-06-17 17:19 | sandy
通过程序运行:
我将您的代码生成一个HTML文件,使用IDE读取该文件,IDE提示 :error load test case ,no command found ,请问为什么??
疑问:这是一个JAVA 文件,可以把它保存成HTML 格式的吗?IDE 怎样解析的阿  回复  更多评论
  
# re: Selenium-RC使用介绍
2008-07-13 09:45 | zhengxiaoyan
为什么我执行这句
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
怎么显示的不正确呢? 可以打开浏览器但是:
没有ID 出先啊
能不能帮我看下啊
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
09:39:35.343 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
09:39:35.375 INFO - Command request: getNewBrowserSession[*iexplore, http://www.
google.com] on session null
09:39:35.375 INFO - creating new remote session
09:39:35.406 INFO - Allocated session 39fb041ab76c48cab156f120f7f0685e for http:
//www.google.com, launching...
09:39:35.406 INFO - Modifying registry settings...
09:39:35.828 INFO - Launching Internet Explorer...


如果执行这句cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com将弹不出浏览器

  回复  更多评论
  
# re: Selenium-RC使用介绍[未登录]
2008-07-13 17:13 | Becky
@sandy

Selenium IDE 只认html代码格式的脚本。同时,它可以把已经录制好的html脚本,转化为其他各种语言的代码,使用这个功能,程序员可以把IDE生成的java或其他格式的代码贴到自己工程的测试代码中去,略做改动便可以使用,而不用自己亲自一行一行的写单元测试。  回复  更多评论
  
# re: Selenium-RC使用介绍[未登录]
2008-07-13 18:14 | Becky
@zhengxiaoyan

对于Firefox的问题,FF3有问题,很多人汇报了,http://clearspace.openqa.org/message/45948
看起来最新出的selenium包已经可以了。

对于Session的问题,39fb041ab76c48cab156f120f7f0685e 也照样用的。  回复  更多评论
  
# re: Selenium-RC使用介绍
2008-07-14 13:37 | zhengxiaoyan
我第一次用的是selenium-remote-control-1.0-beta-1版本
现在用的是
selenium-remote-control-0.8.0版本

服务器执行语句的时候好像使用的是浏览器的自动代理服务器
但是我这里是手动的服务器
每次执行cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
可以看到你图一中的上部分,但是,google的网页就打不开。而且控制台也能给出id

Got result: OK,1216011084656
是不是跟版本有关系,请问您上面的例子用的是哪个版本的?
谢谢,赐教!  回复  更多评论
  
# re: Selenium-RC使用介绍
2008-07-15 01:18 | Becky
@zhengxiaoyan


我重新下载了 selenium-remote-control-0.9.2-dist.zip 和 selenium-remote-control-1.0-beta-1-dist.zip 两个版本进行测试,结果如下:

在0.9.2中,sessionid 是数字,在1.0中,sessionid 是数字字母组合,在API中sessionid 是String 类型,应该是没有区别的。

对于google.com,在 cmd=open&1=http://www.google.com/&sessionId=xxxx 步骤后,会出现 01:09:14.156 INFO - Got result: 没有权限 on session 2e8c4855b7eb4dfcadc7325ce9e5 的错误,对于 Permission denied 错误,在google.com 才会出现,在baidu, yahoo, 包括自己机器上开一个服务器测试, 都是好的。可能google对于session做了限制。

你提到的 “可以看到你图一中的上部分,但是,google的网页就打不开。而且控制台也能给出id ” 问题......请你继续往下一步测试。  回复  更多评论
  
# re: Selenium-RC使用介绍
2008-07-15 01:19 | Becky
日志:

cmd=getNewBrowserSession&1=*iexplore&2=http://www.baidu.com
01:08:04.765 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=getNewBrowserSession&1=*iexplore&2=http://www.baidu.com
01:08:04.781 INFO - Command request: getNewBrowserSession[*iexplore, http://www.
baidu.com] on session null
01:08:04.781 INFO - creating new remote session
01:08:04.781 INFO - Allocated session 5f4c15de75b24f65b1b930ae6b6b13ce for http:
//www.baidu.com, launching...
01:08:04.796 INFO - Modifying registry settings...
01:08:05.421 INFO - Launching Internet Explorer...
01:08:11.312 INFO - Got result: OK,5f4c15de75b24f65b1b930ae6b6b13ce on session 5
f4c15de75b24f65b1b930ae6b6b13ce
cmd=open&1=http://www.baidu.com/&sessionId=5f4c15de75b24f65b1b930ae6b6b13ce
01:08:30.890 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=open&1=http://www.baidu.com/&sessionId=5f4c15de75b24f65b1b930ae6b6b13ce
01:08:30.906 INFO - Command request: open[http://www.baidu.com/, ] on session 5f
4c15de75b24f65b1b930ae6b6b13ce
01:08:31.437 INFO - Got result: OK on session 5f4c15de75b24f65b1b930ae6b6b13ce
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
01:08:41.968 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
01:08:41.968 INFO - Command request: getNewBrowserSession[*iexplore, http://www.
google.com] on session null
01:08:41.968 INFO - creating new remote session
01:08:41.968 INFO - Allocated session 2e8c4855b7eb4dfcadc7325ce9e505b9 for http:
//www.google.com, launching...
01:08:42.000 INFO - Modifying registry settings...
01:08:42.703 INFO - Launching Internet Explorer...
01:08:48.500 INFO - Got result: OK,2e8c4855b7eb4dfcadc7325ce9e505b9 on session 2
e8c4855b7eb4dfcadc7325ce9e505b9
cmd=open&1=http://www.google.com/&sessionId=2e8c4855b7eb4dfcadc7325ce9e505b9
01:09:13.328 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=open&1=http://www.google.com/&sessionId=2e8c4855b7eb4dfcadc7325ce9e505b9
01:09:13.328 INFO - Command request: open[http://www.google.com/, ] on session 2
e8c4855b7eb4dfcadc7325ce9e505b9
01:09:14.156 INFO - Got result: 没有权限 on session 2e8c4855b7eb4dfcadc7325ce9e5
05b9  回复  更多评论
  
# re: Selenium-RC使用介绍[未登录]
2009-01-13 17:05 | a
想请教些问题  回复  更多评论
  
# re: Selenium-RC使用介绍[未登录]
2009-01-13 17:08 | a
请指教,可以加我QQ吗?谢谢!
QQ:331095842  回复  更多评论
  
# re: Selenium-RC使用介绍
2009-10-29 10:44 | ddd
39fb041ab76c48cab156f120f7f0685e这就是你的sessionId@zhengxiaoyan
  回复  更多评论
  
# re: Selenium-RC使用介绍
2012-04-18 19:38 | bella
您好,我在输入第二个命令(cmd=open&1=http://www.google.com/&sessionId=683528)后,提示我没有权限。  回复  更多评论
  
# re: Selenium-RC使用介绍
2012-09-20 21:18 | shj
请教下,我知道selenium ide,selenium rc,这里讲到了selenium server 可以介绍一下这3者吗?有点搞晕了,我们为什么需要学习selenium server?这是最原始的测试,用这个我不需要把录制好的脚本放到eclipse里运行吗?我按照你给的命令打开了360浏览器里面是空白的  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(3)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

  • 1. re: Selenium使用介绍
  • 这里可以用多种受支持的组件定位符中的一种来指定目标。通常使用的是组件的 ID 或名称,但 XPath 和 DOM 定位符也是受支持的;
  • --bingo online
  • 2. re: Selenium使用介绍
  • 测试环境可以和程序代码一同部署于应用服务器下,也可单独搭建。
  • --Roulette Francese
  • 3. re: Selenium使用介绍
  • 都是要进行修改的,这样能够增加脚本的健壮性。将脚本存为html文件。最终的脚本也要至少回放一遍通过才能算完成,在Selenium IDE中,点播放按钮观看放映。
  • --cavalli in vendita
  • 4. rock
  • The logical progression and organizational structure of an essay can take many forms.
  • --this
  • 5. rock
  • 到底摇头点头怎么区分的呢。印度同事说:摇头就是表示不同意,点头表示同意,和其他国家人一样的,而摇晃脑袋的话,要看场景上下文的。
  • --slot machine gratis