Selenium1工作原理
内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925
简介:
Selenium 1.0中可以使用多种语言编程,当然前提是支持http库。在运行selenium1.0程序之前需先启动selenium server端(selenium remote control),简称RC。RC主要包括三个部分:launcher,http proxy,selenium core。其中selenium core是被selenium server嵌入到浏览器页面中的,selenium core内部是一堆javascript函数构成,通过调用这些函数来实现对浏览器的各种操作。而selenium 2.0(selenium1 + webdriver)最显著的特点就是不用再启动server端了。
Selenium 1.0是第一个基于浏览器的开源自动化测试工具,由javascript实现的,所以只要是支持javascript的浏览器都可以很好的支持它。但缺点是,每一个浏览器对于执行 javascript都有很严格的安全限制(不可跨域),以防止用户被恶意脚本攻击。这也导致了selenium在某些场景下的测试工作变得很困难,比如IE下面的 upload操作就不允许执行往输入框中填写文件的路径。
主要有以下几点问题亟待解决: 1.没有原生的鼠标和键盘事件 2.XSS/HTTP同源数据问题 3.popup dialog问题
Webdriver对不同浏览器的处理方式和selenium有着明显的不同,selenium是不管什么浏览器都是javascript来处理,而webdriver是选择浏览器最容易接受的语言来处理。比如,在IE 中,C++最合适,在firefox中,javascript最合适等等。通过灵活选择最合适的语言来处理多浏览器,我们可以很好的回避某些浏览器对 javascript的安全限制。而且webdriver不仅仅具有这些能力,它还能够调用操作系统API,尤其是当用户需要模拟鼠标和键盘进行真是的页面操作的时候,这项能力的作用尤为明显。 把上面两款工具放到一起比较,优缺点就比较明显了。Selenium要求真实的浏览器环境,而webdriver可以直接操作HTML unit驱动,大家都知道selenium启动firefox非常慢,而webdriver可以通过HTML unit在系统内存中迅速的执行,但是这两者都不方便调试。
Webdriver不支持并行测试,而selenium GRID支持。Webdriver要求针对浏览器选择最合适的语言来编写脚本,而Selenium可以把多种语言解析成javascript来操控植入浏览器的Selenium Core来完成操作,因此把两者的优点集合起来,即selenium 1.0+webdriver=selenium 2
如何启动Selenium1的测试脚本?
1. Selenium IDE可以导出多种语言的Selenium脚本,也可自己编写测试脚本(python):
from selenium import selenium sel = selenium("localhost", 4444, "*firefox", "https://www.baidu.com/")
sel.start()
# 百度搜索关键字selenium grid
sel.open("/")
sel.click("id=kw")
sel.type("id=kw", "selenium grid")
sel.click("id=su")
2. 启动server,在server包的目录下的cmd输入:java -jar selenium-server-standalone-3.0.1.jar
3. 执行测试脚本
一.Selenium RC的组成
Selenium 1.0家谱
Selenium RC主要由两部分组成:
(1)Selenium Server: (Remote Server)
Selenium Server负责控制浏览器行为,总的来说,Selenium Server主要包括3个部分:Launcher,Http Proxy,Selenium Core。其中Selenium Core是被Selenium Server嵌入到浏览器页面中的。其实Selenium Core就是一堆JS函数的集合,就是通过这些JS函数,我们才可以实现用程序对浏览器进行操作。
(2)Client Libraries:
所编写的测试用例(Testcase),用来控制Selenium Server的库。简单来说,就是我们写的测试脚本。
二.Selenium RC与Testcase的关系
如图:红色步骤1~8等于以下文字(1) (2) (3) (4) ,绿色则与以下步骤相符
(1) 测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。
为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。
(2) Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。
(3) 测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析成JS,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。
(4) Selenium Core接收到指令后,执行操作。
(5) 浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的Web页面。
由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。
(6) Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。
(7) Selenium Server的Http Proxy把接收的Web页面返回给浏览器。
继续前一篇的问题,为什么Selenium RC中的Selenium Server需要以这种代理服务器的形式存在?其实,这和浏览器的“同源策略”(The Same Origin Policy)有关。
一.什么是同源策略
同源策略,它是由Netscape提出的一个著名的安全策略,现在所有的可支持JavaScript的浏览器都会使用这个策略。
为什么需要同源策略,这里举个例子:
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生。
比如说,浏览器的两个tab页中分别打开了http://www.baidu.com/index.html和http://www.google.com/index.html,其中,JavaScript1和JavaScript3是属于百度的脚本,而JavaScript2是属于谷歌的脚本,当浏览器的tab1要运行一个脚本时,便会进行同源检查,只有和www.baidu.com同源的脚本才能被执行,所谓同源,就是指域名、协议、端口相同。所以,tab1只能执行JavaScript1和JavaScript3脚本,而JavaScript2不能执行,从而防止其他网页对本网页的非法篡改。
二.Selenium Server为什么以这种代理服务器的形式存在
上面说了同源策略,那同源策略的Selenium Server有什么关系呢??呵呵,上一篇说过,Selenium Core是一堆JS函数的集合,它是我们操作浏览器的基础。当存在同源策略时,便出现一些问题,看下图:
因为Selenium Core的JS脚本的“源”是localhost,所以浏览器会阻止Selenium Core的JS脚本在测试页面上执行,这就是为什么在本系列第一篇中说,如果只使用Selenium Core进行测试,需要把Selenium Core安装到远程服务器上。
为了解决上面这个问题,Selenium RC中的Selenium Server就以代理服务器的形式出现了,下图说明它是如何借助代理的身份蒙骗浏览器的:>
Selenium Server以代理的形式存在,通过修改WebSite的源信息,从而达到欺骗浏览器的目的,就这样,Selenium RC就轻松绕过了同源策略。在上图中,浏览器会认为WebSite和Selenium Core来自同一个“源”----代理服务器!
三. Remote的理解
Remote可以启动server = selenium grid。除了可以更方便的进行跨平台、浏览器的测试外,最重要的一点是排除我们本地环境的污染,因为我们工作用的PC其实我们安装了很多的软件,那么在coding的时候这些软件对环境的污染就难免不对我们的代码产生影响,最后就很容易造成代码在我这运行良好,但是到了别人那就跑不起来了或者结果有差异,这时我们就需要一个干净的PC环境作为一个验证机,在自己的PC上编写完代码后在验证机上进行Remote执行验证。当然把代码拷贝过去执行也是可以。
个人理解,remote是早期selenium1便存在,后来webdriver是继承了它也重写了它。所以早期remote是通过RC执行脚本,不需要驱动,但现在到selenium3,只存在webdriver协议那样的工作方式。所以涉及曾在selenium1合并过来的grid --》 server--》chromedriver驱动 --》chrome浏览器,也是用webdriver工作方式在跑。
Selenium1工作原理的更多相关文章
- webdriver的工作原理
selenium1的原理就是使用js来驱动浏览器,因为现在基本不用,所以不做过多讨论,下面是我整理的webdriver的工作原理,大致就是通过命令请求webdriver,然后webdriver通过浏览 ...
- Selenium 工作原理
Selenium是ThoughtWorks公司研发的一个强大的基于浏览器的开源自动化测试工具,它通常用来编写web应用的自动化测试.早期也即Selenium1.x时期主要使用Selenium RC(S ...
- selenium工作原理详解
selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
随机推荐
- Asp.Net 常用工具类之加密——对称加密DES算法(2)
又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...
- 【经验】AngularJS
1.关于ng-model <textarea id="feature_name" class="col-sm-3" placeholder="软 ...
- 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据
是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...
- apicloud上传图片
//定义api $("#photo").change(function(){ //获取图片 api.getPicture({ sourceType: 'library', enco ...
- 强大的修图app--美图秀秀
美图秀秀的强大之处 市面上有很多图形处理软件,最专业的是ps,但是ps做起来需要的专业技术很高,而美图秀秀可以说用起来并不需要很专业,操作起来非常方便,而且界面可爱.所以说美图秀秀是一款很好用的免 ...
- Linux下随机生成密码的命令总结
有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下 ...
- Dell M102ZD-128 —— 拿XP拯救你
查过新浪博客上的记录: http://blog.sina.com.cn/s/articlelist_1259160330_7_1.html 2011年6月买了这台 Dell Inspiron M102 ...
- 队列工厂之RedisMQ
本次和大家分享的是RedisMQ队列的用法,前两篇文章队列工厂之(MSMQ)和队列工厂之RabbitMQ分别简单介绍对应队列环境的搭建和常用方法的使用,加上本篇分享的RedisMQ那么就完成了咋们队列 ...
- 《Machine Learning》系列学习笔记之第四周
第四周 Model Representation I 让我们来看看如何使用神经网络来表示假设函数.在非常简单的水平上,神经元基本上是将输入(树突)作为输入到输出(轴突)的电输入(称为"尖峰& ...
- HTTP协议分析
一.域名概述 1.域名解析的作用: 主机数量增多时,IP地址不容易记忆,域名方便记忆.域名记忆更加直观. 2.hosts文件 早期通过hosts文件进行域名的解析,Linux系统中hosts文件存放路 ...