selenium(一)--selenium 家族
2015-12-16 23:17:04
QTP mercury 是商业的,单词意思是水银,而selenium 是开源的,单词意思是硒,有些相对的意思。
1、selenium ide
selenium ide 是 firxfox 的一个插件,提供了录制和回放脚本的功能,并会把所记录的Selenese (Selenium Commands)转化为HTML/Java/C#/Python/Perl/Php/Ruby等语言脚本,但是 selenium 录制的脚本不是100%符合我们的需求的,还是以手写脚本为主。
2、selenium core
Core是selenium的一个核心的东西,ide 已经集成了它。selenium core 内部由一堆javascript函数构成,加载到浏览器后,通过调用这些函数来实现对浏览器的各种操作。
3、selenium RC(remote control)

Selenium RC 的组成部分为:
Selenium Server:Selenium Server又可分为3部分,launcher,http proxy,selenium core。
Launcher启动浏览器,Selenium Core在浏览器启动时嵌入到浏览器中,并且浏览器的代理被设置为Http Proxy,用以截取和验证浏览器和测试程序之间传递的HTTP信息。
Client libraries: 负责提供编程语言与Selenium Server 之间的接口。
selenium rc 支持多语言,如 Java、JavaScript 、Ruby 、Python、 PHP、Perl and C#,此外,它还基本支持所有的浏览器。
这里要提的一个概念是同源策略,即相同的协议、端口、域名,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。其目的是确保一个站点的内容不会被另一个站点的脚本所访问。同源规则专注于确保浏览器加载的任何代码,都只能在同一站点内部进行操作。假如你在一个浏览器的一个选项卡内打开了一个网上银行的页面(www.yinhang.com),又在另选项卡上不小心打开了一个挂马的页面(www.guama.com),那么挂马的页面是不能操作网上银行页面的内容,就是因为引入了同源规则。
因为Selenium Core的JS脚本的“源”是localhost,所以浏览器会阻止Selenium Core的JS脚本在测试页面(如百度页面)上执行,如果只使用Selenium Core进行测试,需要把Selenium Core安装到远程服务器上。比如说,你要在百度页面上进行测试,就需要把selenium core安装到百度服务器上。
而Selenium RC通过http代理的方式很好的解决了同源策略并欺骗了浏览器,它修改WebSite的源信息,让浏览器会认为WebSite和Selenium Core来自同一个“源”----代理服务器!
个人理解:不仅将JS命令从本机发出伪装成从代理服务器发出,也将百度服务器响应返回时传递给浏览器的JS命令伪装成是从代理服务器传递给浏览器的。

1. 测试用例通过Http请求建立与 selenium-RC server 的连接
2. Selenium RC Server 驱动一个浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy
3. 执行用例向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作并注入 JS 代码
(一直很奇怪3这条线怎么没经过HTTP proxy??
后来看到了另一种解释,认为比较符合该图:RC是一个http代理程序,用来注入到浏览器和被测web程序之间,这样浏览器所有的请求和接收的内容都会通过RC;RC会把浏览器的请求发送给真实的web程序,而在接收到web程序的响应内容时,并没有把内容原原本本的返回给浏览器客户端,而是把包含selenium-core的内容注入到响应内容中去,然后才发送响应内容给浏览器,这样就通过欺骗的方式让浏览器认为WebSite和Selenium Core是同源的。)
4.Selenium Core执行接受到的指令并操作
5. 当浏览器收到新的请求时,发送http请求
6. Selenium Server接收到浏览器发送的Http请求后,自己重组Http请求,获取对应的Web页面
7. Selenium Server中的Http Proxy把接受到的页面返回给浏览器。
但是,正所谓成也萧何败也萧何,由于selenium 是由javascript实现的,所以只要是支持javascript的浏览器都可以很好的支持它,正是由于它的这一特点,导致了它的缺点。现在,人们对于网络安全问题越来越重视,每一个浏览器对于执行javascript都有很严格的安全限制,以防止用户被恶意脚本攻击。这也导致了selenium在某些场景下的测试工作变得很困难,比如IE下面的upload操作就不允许执行往输入框中填写文件的路径。
4、selenium grid 1.0
当你考虑
1、让脚本在不同的系统和浏览器运行,也就是测试需要考虑各种浏览器兼容性时
2、缩短测试执行时间时
可以考虑使用Selenium Grid ,Grid 是一个可以方便的让你脚本运行在不同的平台以及不同的浏览器上的一个框架。

如上图,Selenium Grid 由一个Hub节点和若干个Node节点组成。 其中Hub节点主要用于管理各个Node节点的注册及其状态,并接收Selenium Scripts脚本,然后转发给各个Node节点去执行,所以Hub本身节点是不执行脚本的,Hub是做脚本分发(根据客户端发送的请求的不同,分发到指定的浏览器或操作系统)真正执行脚本都是放于Node节点上。既然Hub 会分发脚本,那么免去了一个一个Node机器上去拷贝你脚本的麻烦啦。
注意:Grid 只是提供运行脚本的环境,无法决定脚本以什么样的形式去跑(并行的方式,或者多环境的方式)。脚本以什么样的形式跑,由脚本本身和脚本的runner (一般用junit或者TestNG)的配置所决定。参见 http://www.51testing.com/html/42/111742-119973.html
5、Webdriver & selenium 2.0
WebDriver 是Selenium 1 的升级版本, 也可以理解为两个不同的产品,相比Selenium 1 来说可以更好地绕过JS的限制,API也更易于使用。
Webdriver项目是由Simon Stewart创建的,它是一个非常便捷的自动化测试工具。Webdriver对不同浏览器的处理方式和selenium有着明显的不同,selenium是不管什么浏览器都是javascript来处理,而webdriver是选择浏览器最容易接受的语言来处理。比如,在IE中,C++最合适,在firefox中,javascript最合适等等。通过灵活选择最合适的语言来处理多浏览器,我们可以很好的回避某些浏览器对javascript的安全限制。而且webdriver不仅仅具有这些能力,它还能够调用操作系统API,尤其是当用户需要模拟鼠标和键盘进行真是的页面操作的时候,这项能力的作用尤为明显。当然,WebDriver 并不能像 Selenium 1 支持那么多的语言、浏览器。因此,我们将两者的优点集合起来,这就是selenium 2.0,即selenium 1.0+webdriver。
6、selenium grid 2.0
grid 2.0 的发布还晚于Selenium 2.0,它同样是grid 1.0 的那种结构,还基本上支持Selenium 2.0的所有功能。
selenium(一)--selenium 家族的更多相关文章
- Selenium (3) —— Selenium IDE + Firefox录制登录脚本(101 Tutorial)
Selenium (3) -- Selenium IDE + Firefox录制登录脚本(101 Tutorial) selenium IDE版本: 2.9.1 firefox版本: 39.0.3 参 ...
- Selenium (4) —— Selenium是什么? WebDriver是什么?做什么?(101 Tutorial)
Selenium (4) -- Selenium是什么? WebDriver是什么?做什么?(101 Tutorial) selenium版本: v2.48.0 (Standalone Seleniu ...
- Selenium (2) —— Selenium WebDriver + Grid2(101 Tutorial)
Selenium (2) -- Selenium WebDriver + Grid2(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standa ...
- Selenium (1) —— Selenium安装与测试(101 Tutorial)
Selenium (1) -- Selenium安装与测试(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standalone Selenium ...
- selenium - 查看selenium版本信息
1. pip list 2. pip show selenium 3. cmd>>python >>> import selenium>>> help( ...
- 【selenium】- selenium简介
本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. Selenium的来历 2. Selenium家庭成员 Selenium RC: Selenium 1 Selenium Webdriv ...
- 自动化测试模型 Selenium IDE Selenium Gird2
1.线性测试 每个测试脚本相对独立,且不产生其他依赖与调用,其实就是单纯的来模拟用户完整的 操作场景.前一篇所写的测试脚本就属于线性测试. 优点:每个脚本完整且独立 缺点:测试用例的开发与维护成本高 ...
- Selenium(一)---Selenium的安装和使用
一.前言 最近在帮一个老师爬取网页内容,发现网页是动态加载的,为了拿到全部的网页数据,这里使用到了Selenium.Selenium 是一个用于Web应用程序测试的工具,它可以模拟真实浏览器,支持多种 ...
- java selenium (八) Selenium IDE 用法
Selenium IDE 是Firefox 浏览器的一个插件, 它会记录你对Firefox的操作,并且可以回放它的操作. 用法简单,不过我觉得这个没多大的用处 阅读目录 Selenium IDE ...
- java selenium (一) selenium 介绍
Selenium 是目前用的最广泛的Web UI 自动化测试框架. 本系列文章,将深入简出来讲解selenium 的用法 文章的末尾处, 有整个系列的链接 阅读目录 selenium 的命名 sele ...
随机推荐
- 我的Java学习笔记-Java面向对象
今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...
- Ant Man CodeForces - 704B (图论,贪心)
大意: 给N个点,起点S终点T,每个点有X,A,B,C,D,根据I和J的X坐标可得I到J的距离计算公式 |xi - xj| + ci + bj seconds if j< i |xi - xj| ...
- layedit
layedit.set({ uploadImage: { url: '' //接口url ,type: '' //默认post } }); //注意:layedit.set 一定要放在 build 前 ...
- java.lang.string split 以点分割字符串无法正常拆分字符串
//错误的做法String ip="192.168.11.23"; String[] spstr_IP=ip.split(".");//这种方式无法拆分在ip字 ...
- sublime 个人心得
sublime 3快捷键: (1) Ctrl+O(Command+O)可以实现头文件和源文件之间的快速切换 (2) 双击可选中光标所在单词,三击可选中光标所在行(等同于Ctrl+L(Command+L ...
- BZOJ1299 [LLH邀请赛]巧克力棒
怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n ...
- CentOS6编译安装Python3
CentOS6默认Python版本是2, 但我使用的是Python3,因此需要自己安装 但记住,不要删除自带的Python2,否则很多东西会报错,比如yum之类的.(别问我为什么知道...) 话不多说 ...
- MySQL 中Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
一.ICP优化原理 Index Condition Pushdown (ICP),也称为索引条件下推,体现在执行计划的上是会出现Using index condition(Extra列,当然Extra ...
- (C/C++学习笔记) 九. 变量的存储类型
九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...
- C++设计模式之解释器模式
2013年07月06日 19:43:00 阅读数:8853 概述: 未来机器智能化已然成为趋势,现在手机都能听懂英语和普通话,那我大中华几万种方言的被智能化也许也是趋势,我们的方言虽然和普通话相似,但 ...