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 ...
随机推荐
- AIM Tech Round 3 (Div. 1) (构造,树形dp,费用流,概率dp)
B. Recover the String 大意: 求构造01字符串使得子序列00,01,10,11的个数恰好为$a_{00},a_{01},a_{10},a_{11}$ 挺简单的构造, 注意到可以通 ...
- hdu 6395 Sequence (简单矩乘)
P/n大多数情况是不变的, 取值只有$O(\sqrt{P})$种, 可以用$p/(p/i)$跳过重复的值, 复杂度$O(logn\sqrt{P})$ 要注意 P跟模数P有冲突 要特判p/i==0和p/ ...
- CentOS 7 install Nginx
1. rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.r ...
- UVA-1629 Cake slicing (DP、记忆化搜索)
题目大意:一块n*m的矩形蛋糕,有k个草莓,现在要将蛋糕切开使每块蛋糕上都恰有一个(这意味着不能切出不含草莓的蛋糕块)草莓,要求只能水平切或竖直切,求最短的刀切长度. 题目分析:定义状态dp(xa,y ...
- Ajax中Delete请求参数 后台无法获取的解决方法(Restful风格)
方法一: 在ajax中写入data来传参时,直接把参数拼接到url后面 例如: $.ajax({ url: '/cyberspace/vrv/event/delete/1002?startTime=& ...
- Activiti工作流笔记(3)
Activiti工作流的流程部署和删除流程部署 流程部署代码: /** * 部署流程 */ public class ActivitiTest { RepositoryService reposito ...
- AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测
AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com 作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...
- 如何用SPY++工具查看窗体的句柄
我安装的是vs2012,先找到SPY++工具打开 打开方式: 方式1:通过路径(C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microso ...
- custom usb-seriel udev relus for compatible usb-seriel devices using kermit
custom usb-seriel udev relus for compatible usb-seriel devices add-pl2303.rules: ACTION== "add& ...
- Python Threading多线程简单例子
业务监控,多线程例子,实现每类个监控项的不同监控间隔. #coding=utf-8import sysimport pymysqlimport osfrom prometheus_client imp ...