菜鸟学自动化测试(七)----selenium RC 工作原理

简介:

关于selenium RC环境搭建(基于java语言),我在系统的学习selenium之前就已经做了,并在我的这个系列的文章中可以找到。那是照着一位前辈的视频操作完成的,我详细的记录的操作步骤。

在这里我们一起了解一下selenium RC的工作原理。

 

简介

那么之前学习的了selenium IDEselenium命令,那么是不是我们用selenium IDE就可以完成我们的所有自动化测试工作了呢?No !Selenium IDE 没我们认为的那么强大,在实际的项目中会有各种复杂的操作,如条件判断、循环、读写文件、查询数据库和Email邮寄测试报告。这些都不是selenium IDE简单的录制就能完成的。

Selenium RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行。Selenium RC 能够充分利用编程语言来构建更复杂的自动化测试案例。

 

Selenium RC工作原理

 

那么Selenium RC组件是如何运转的,以及他们在测试案例运行过程中扮演什么角色。

 

 

 

  

说明客户端库文件将命令传递给server。接着server使用selenium-CorejavaScript命令传递给浏览器,浏览器会使用自带的javaScript翻译器来执行selenium命令。这意味着测试脚本中的selenese操作和验证将被执行。

 

 

* Selenium server

它负责启动和关闭浏览器,解释和运行从测试程序传来的selenese命令,就像HTTP代理一样,截取和验证浏览器与待测应用(AUT)之间的HTTP消息。

 

在测试程序打开浏览器时(使用客户端库文件的API函数),RC server绑定 selenium Core并自动将它嵌入到浏览器中。selenium Core是一个javaScript程序,实际上市一系列javaScript函数,它们使用浏览器内置的javaScript翻译器来翻译和执行selenese命令。

* 客户端文件

 

客户端库文件提供编程接口。允许你使用自己编写的程序来运行selenese命令,对于不同的语言都有对应的客户端库文件。类似于数据库方言包的概念,如果你想用java操作数据库,对于不同的数据库,需要导入不同的数据库驱动jar文件,mysqlmysql的方言包,DBDB的方言包。

 

客户端库文件获取一条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将的好,也没他理解的深入。但也算是自己小小的总结。

目录
相关文章
|
12天前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(十二)-java+ selenium自动化测试-元素定位大法之By link text(详细教程)
【4月更文挑战第4天】本文介绍了link text在自动化测试中的应用。Link text是指网页中链接的文字描述,点击可跳转至其他页面。文章列举了8种常用的定位方法,其中着重讲解了link text定位,并通过实例展示了如何使用Java代码实现点击百度首页的“奥运奖牌榜 最新排名”链接,进入相应页面。如果link text不准确,则无法定位到元素,这说明linkText是精准匹配,而非模糊匹配。文章还提到了partial link text作为link text的模糊匹配版本,将在后续内容中介绍。
35 4
|
11天前
|
XML 前端开发 Java
《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
【4月更文挑战第6天】按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath。xpath 的定位方法, 非常强大。使用这种方法几乎可以定位到页面上的任意元素。xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XPath语言可以用在整棵树中寻找指定的节点。
41 0
|
5天前
|
监控 测试技术 API
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第14天】在软件开发过程中,自动化测试是确保代码质量、减少人工重复劳动的关键步骤。Selenium作为一款广泛使用的自动化测试工具,提供了对多种浏览器和操作系统的支持。本文将探讨Selenium的核心组件及其架构设计,分析其如何通过WebDriver与浏览器交互,以及它如何支持多种编程语言进行脚本编写。同时,我们还将讨论Selenium Grid的作用以及它如何实现并行测试,以缩短测试周期并提高测试效率。
168 58
|
5天前
|
Web App开发 测试技术 网络安全
|
8天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
【4月更文挑战第9天】本文介绍了CSS定位方式的使用,包括它的优势和8种常用的定位方法。CSS定位相比XPath定位更快、更稳定。文章通过示例详细讲解了如何使用CSS定位元素,包括通过id、name、class name、tag name、link text、partial link text以及XPath进行定位。还提供了Java代码示例来演示如何在自动化测试中使用这些定位方法。
37 1
|
1月前
|
JavaScript 前端开发 测试技术
Python Selenium基本用法
Python Selenium基本用法
29 2
|
2月前
|
Web App开发 数据采集 前端开发
基于Python的Selenium详解:从入门到实践
基于Python的Selenium详解:从入门到实践
101 0
|
3月前
|
Web App开发 Python
Python使用selenium的Chrome下载文件报错解决
Python使用selenium的Chrome下载文件报错解决
46 0
|
3月前
|
Web App开发 Python
python+selenium+Chrome 监测文件是否下载完毕
python+selenium+Chrome 监测文件是否下载完毕
49 0
|
29天前
|
Web App开发 前端开发 JavaScript
Python Selenium是一个强大的自动化测试工具
Python Selenium是一个强大的自动化测试工具

热门文章

最新文章