关于
selenium RC
环境搭建(基于
java
语言),我在系统的学习
selenium
之前就已经做了,并在我的这个系列的文章中可以找到。那是照着一位前辈的视频操作完成的,我详细的记录的操作步骤。
在这里我们一起了解一下
selenium RC
的工作原理。
那么之前学习的了
selenium IDE
与
selenium
命令,那么是不是我们用
selenium IDE
就可以完成我们的所有自动化测试工作了呢?
No !Selenium IDE
没我们认为的那么强大,在实际的项目中会有各种复杂的操作,如条件判断、循环、读写文件、查询数据库和
E
—
mail
邮寄测试报告。这些都不是
selenium IDE
简单的录制就能完成的。
Selenium RC
可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行。
Selenium RC
能够充分利用编程语言来构建更复杂的自动化测试案例。
Selenium RC
工作原理
那么
Selenium RC
组件是如何运转的,以及他们在测试案例运行过程中扮演什么角色。
说明客户端库文件将命令传递给
server
。接着
server
使用
selenium-Core
的
javaScript
命令传递给浏览器,浏览器会使用自带的
javaScript
翻译器来执行
selenium
命令。这意味着测试脚本中的
selenese
操作和验证将被执行。
* Selenium server
它负责启动和关闭浏览器,解释和运行从测试程序传来的
selenese
命令,就像
HTTP
代理一样,截取和验证浏览器与待测应用(
AUT
)之间的
HTTP
消息。
在测试程序打开浏览器时(使用客户端库文件的
API
函数),
RC server
绑定
selenium Core
并自动将它嵌入到浏览器中。
selenium Core
是一个
javaScript
程序,实际上市一系列
javaScript
函数,它们使用浏览器内置的
javaScript
翻译器来翻译和执行
selenese
命令。
*
客户端文件
客户端库文件提供编程接口。允许你使用自己编写的程序来运行
selenese
命令,对于不同的语言都有对应的客户端库文件。类似于数据库方言包的概念,如果你想用
java
操作数据库,对于不同的数据库,需要导入不同的数据库驱动
jar
文件,
mysql
有
mysql
的方言包,
DB
有
DB
的方言包。
客户端库文件获取一条
selenise
命令,并将它传递给
selenium Server
,以便执行一个指定操作或者基于待测应用(
AUT
)进行测试。客户端库文件收到命令的执行结果,在将其传给你的测试程序。程序接收到结果后,将它保存在变量中。接着报告成功还是失败,如果结果是意料之外的失败,还能有针对性地采取正确措施。
因此要创建测试程序,你只要使用客户端库文件的
API
来编写程序,程序会去运行一系列
selenium
命令,当然
selenium IDE
录制的内容生成
selenese
测试脚本,可以转换成不同测语言脚本。
Selenium RC
架构
下面我们来了解隐藏在
selenium RC
背后的技术实现。要了解
selenium RC Server
工作的细节,需要我们理解下面几个概念。
1.
同源规则
Selenium
面临的主要限制就是同源规则,市场上的每一款浏览器都应用了这一安全限制。其目的是确保一个站点的内容不会被另一个站点的脚本所访问。同源规则专注于确保浏览器加载的任何代码,都只能在同一站点内部进行操作。假如你在一个浏览器的一个选项卡内打开了一个网上银行的页面(
www.yinhang.com
)。又在另选项卡上不小心打开了一个挂马的页面(
www.guama.com
),那么挂马的页面是不能操作网上银行页面的内容,因为引入了同源规则。所以,他们不能相互作用。如果不引入同源规则,我们可以想象用户很生气,后果很严重。
要在这一规则下工作,
selenium Core
必须与待测系统在同一源中。在历史上,
selenium Core
被这一问题所限制,因为它是用
javaScrpt
实现的。但是
selenium RC
没有被同源规则所限制,它使用
selenium Server
作为单利来回避这一问题,“哄骗”浏览器,让浏览器以为自己在
server
提供的单一站点上工作。
同源:相同的协议、端口、域名
感兴趣的同学
google
“同源规则”和“
XSS(
跨站点执行脚本
)
”相关技术
2.
代理注入
selenium
用来规避同源规则的第一种方法是代理注入,在代理注入模式下,
selenium Server
像客户端配置的
HTTP
代理一样工作,它位于浏览器和待测系统之间。接着其伪造待测系统的
URL
(集成
selenium Core
和一系列测试案例并加以传递,它们就像同源一样)
代理作为第三者,在双方间传递信息,它表现的像一个“
web
服务器”,想浏览器传递待测系统。作为代理
selenium Server
,它拥有篡改待测系统真实
URL
的能力。
浏览器启动时,使用配置的
profile
,其中已经设置
localhost:4444
作为
HTTP
代理,这就是为什么任何来自浏览器的
HTTP
请求都会经过
selenium Server,
而且
HTTP
响应也来自
selenium Server
而非真实的服务器。
(1)
客户驱动与
selenium RC Server
之间建立起一个链接。
(2)
Selenium RC Server
启动浏览器,并在浏览器加载页面中注入了
Selenium Core
的
javaScript
(3)
客户端驱动给
Server
传递一条
Selenese
命令
(4)
客户端驱动个
Server
解释命令,并触发对应的
javaScript
在浏览器中执行。
(5)
Selenium Core
指示浏览器执行第一条指令,例如打开一个待测系统页面。
(6)
浏览器接收到打开请求后,向
Selenium RC Server
(作为浏览器的
HTTP
代理),要求
web
站点内容。
(7)
Selenium RC Server
与
web
服务器通信,请求页面,并且一旦收到响应就将页面传递给浏览器,但它会篡改源,是页面看上去好像来自于与
selenium Core
同源的服务器。
(8)
浏览器接收到
web
页面后,就在保留的框架
\
窗口中展示页面。
3.
提高浏览器权限
这一方式下的工作流与代理注入十分相似,区别在于浏览器以特殊模式
-------
“高特权模式”启动。它允许浏览器做一些通常不被允许的事情,如
XSS
。通过这个浏览器模式,
Selenium Core
可以直接带卡待测系统,并读取和操作其中的内容,而不需要通过
Selenium RC Server
来传递整个待测系统。
(1)
客户驱动与
selenium RC Server
之间建立起一个链接。
(2)
Selenium RC Server
启动浏览器,其实用的
URL
会在页面中加载
Selenium Core
(3)
Selenium Core
从客户端启动得到第一条指令(通过
Selenium RC Server
)
(4)
Selenium Core
执行第一条指令。
(5)浏览器接到打开请求,向
web
服务器请求页面,一旦浏览器接收到
web
页面后,就在保留的框架
\
窗口中展示页面。
===========================================================================
图不优雅,但也是自己花费一个多小时画的。
关于selenium RC 的工作原理。没有hyddd将的好,也没他理解的深入。但也算是自己小小的总结。
http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html
欢迎参考hyddd的博客学习selenium