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 家族的更多相关文章

  1. Selenium (3) —— Selenium IDE + Firefox录制登录脚本(101 Tutorial)

    Selenium (3) -- Selenium IDE + Firefox录制登录脚本(101 Tutorial) selenium IDE版本: 2.9.1 firefox版本: 39.0.3 参 ...

  2. Selenium (4) —— Selenium是什么? WebDriver是什么?做什么?(101 Tutorial)

    Selenium (4) -- Selenium是什么? WebDriver是什么?做什么?(101 Tutorial) selenium版本: v2.48.0 (Standalone Seleniu ...

  3. Selenium (2) —— Selenium WebDriver + Grid2(101 Tutorial)

    Selenium (2) -- Selenium WebDriver + Grid2(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standa ...

  4. Selenium (1) —— Selenium安装与测试(101 Tutorial)

    Selenium (1) -- Selenium安装与测试(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standalone Selenium ...

  5. selenium - 查看selenium版本信息

    1. pip list 2. pip show selenium 3. cmd>>python >>> import selenium>>> help( ...

  6. 【selenium】- selenium简介

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. Selenium的来历 2. Selenium家庭成员 Selenium RC: Selenium 1 Selenium Webdriv ...

  7. 自动化测试模型 Selenium IDE Selenium Gird2

    1.线性测试 每个测试脚本相对独立,且不产生其他依赖与调用,其实就是单纯的来模拟用户完整的 操作场景.前一篇所写的测试脚本就属于线性测试. 优点:每个脚本完整且独立 缺点:测试用例的开发与维护成本高 ...

  8. Selenium(一)---Selenium的安装和使用

    一.前言 最近在帮一个老师爬取网页内容,发现网页是动态加载的,为了拿到全部的网页数据,这里使用到了Selenium.Selenium 是一个用于Web应用程序测试的工具,它可以模拟真实浏览器,支持多种 ...

  9. java selenium (八) Selenium IDE 用法

    Selenium IDE 是Firefox 浏览器的一个插件, 它会记录你对Firefox的操作,并且可以回放它的操作. 用法简单,不过我觉得这个没多大的用处 阅读目录   Selenium IDE ...

  10. java selenium (一) selenium 介绍

    Selenium 是目前用的最广泛的Web UI 自动化测试框架. 本系列文章,将深入简出来讲解selenium 的用法 文章的末尾处, 有整个系列的链接 阅读目录 selenium 的命名 sele ...

随机推荐

  1. CF1083B The Fair Nut and String

    题意 给出两个长度为n的01字符串S和T. 选出k个字典序在S和T之间的长度为n的01字符串,使得尽可能多的字符串满足其是所选字符串中至少一个串的前缀. 这是一道思路比较奇怪的类似计数dp的题. 首先 ...

  2. php date()

    PHP Date() 函数把时间戳格式化为更易读的日期和时间. date(format,timestamp) format:显示时间的格式.  timestamp:可选.规定时间戳.默认是当前时间和日 ...

  3. java 中利用异或实现两个变量互换

    一般实现两个变量之间的互换要用第三个变量,这样做可以,但创建新变量,增加了系统开销.如果要交换的变量时两个整数型变量,可以用更高效的方法.例如:^(异或)操作,举例如下: package chapte ...

  4. Razor视图引擎 语法学习

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  5. C# 中的时间(DataTime)

    在做报表或查询的时候,常常会预设一些可选的日期范围,如本周.本月.本年等,利用 C# 内置的DateTime基本上都可以实现这些功能. 当前时间: DateTime dt = DateTime.Now ...

  6. OC Xcode快捷键

    1. 文件 CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + S ...

  7. POJ 3013最短路变形....

    DES:计算输的最小费用.如果不能构成树.输出-1.每条边的费用=所有的子节点权值*这条边的权值.计算第二组样例可以知道树的费用是所有的节点的权值*到根节点的最短路径的长度. 用dij的邻接矩阵形式直 ...

  8. Keil 中文显示乱码解决办法

    在将代码文件转换成UTF-8之前还要把Keil的环境也设置成UTF-8的模式,方法是:“Edit”——〉“Configuration...”——〉“Encoding”,选择“Encode in UTF ...

  9. Oracle Rman 增量备份与差异备份

    一.增量与差异 关于Incremental增量备份级别: Oracle 9i 共有五种级别 0 1 2 3 4,0级最高-4级最低,0级是1级的基础以此类推. Oracle 10g官方文档明确指出增量 ...

  10. 2.3 C++类的信息隐藏机制 -- 封装

    参考:http://www.weixueyuan.net/view/6335.html 总结: private.protected和public  限制类中声明的变量和函数在外部的访问权限. 声明为p ...