菜鸟学自动化测试(七)----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将的好,也没他理解的深入。但也算是自己小小的总结。

目录
相关文章
|
1天前
|
开发框架 安全 JavaScript
xss漏洞原理(四)自动化XSS
xss漏洞原理(四)自动化XSS
|
6天前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
20天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
17天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
20天前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
29 3
|
27天前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
1月前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
17天前
|
Web App开发 Linux Python
linux上安装selenium环境及测试
该文章提供了在Linux CentOS上安装Selenium环境、Chrome浏览器及Chromedriver的详细步骤,并演示了如何以无头模式进行测试。
53 0
|
28天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
20 0
|
29天前
|
JavaScript 前端开发 测试技术
Selenium2Library实现基于GUI的测试
Selenium2Library实现基于GUI的测试
29 0