文档章节

Selenium 实现 Web 自动化的原理 (软件测试52讲学习笔记)

o
 osc_fmg49rzg
发布于 2019/03/20 09:57
字数 984
阅读 6
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Selenium 1.0 的工作原理

  Selenium 1.0,又称Selenium RC ,RC是Remote Control的缩写。Selenium RC利用的原理:JavaScript代码可以方便的获取页面上的任意元素并执行各种操作。

  但是因为“同源政策(Same-origin policy)”(只有来自相同域名、端口和协议的javaScript代码才能被浏览器执行),所以,要想在测试用例运行中的浏览器中,注入javascript代码,从而实现自动化web操作,Selenium RC必须“欺骗”被测站点,让它误以为被注入的代码是同源的。

  那如何实现“欺骗”呢?这就是需要引入 Selenium RC Server 的原因了。其中的 Http Proxy 模块就是来「欺骗」浏览器的。除了 Selenium RC Server,Selenium RC 方案的另一部分就是 Client Libraries。他们的具体关系如下图1所示:

 

图1 Selenium RC 的基本模块

Selenium RC Server,主要包括Selenium Core,Http Proxy 和Launcher 三部分:

  • Selenium Core,是被注入到浏览器页面中的JavaScript 函数集合,用来实现界面元素的识别和操作;

  • Http Proxy,作为代理服务器修改JavaScrip的源,以达到“欺骗”被测站点的目的;

  • Launcher,用来在启动测试浏览器时完成,Selenium Core 的注入和浏览器代理的设置。

Client Libraries,是测试用例代码向Selenium RC Server发送 Http 请求的接口,支持多种语言,包括 Java、C# 和 Ruby 等。

  Selenium执行流程图,如图2:

 

                         图2 Selenium RC 的执行流程

  1. 测试用例通过基于不同语言的 Client Libraries向 Selenium RC Server 发送Http请求,要求与其建立连接。

  2. 连接建立后,Selenium RC Server 的Launcher 就会启动浏览器或者重用之前已经打开的浏览器,把 Selenium Core(JavaScript 函数的集合)加载到浏览器页面当中,并同时把浏览器的代理设置为Http Proxy。

  3. 测试用例通过 Client Libraries,向 Selenium RC Server 发送 Http请求,Selenium RC Server 解析请求,然后通过 Http Proxy 发送 JavaScript命令通知 Selenium Core 执行浏览器上控件的具体操作。

  4. Selenium Core 接收到指令后,执行操作。
  5. 如果浏览器收到新的页面请求信息,则会发送 Http 请求来请求新的 Web 页面。由于 Launcher 在启动浏览器时把 Http Proxy 设置成为了浏览器的代理,所以 Selenium RC Server 会接收到所有由它启动的浏览器发送的请求。

  6. Selenium RC Server 接收到浏览器发送的 Http 请求后,重组 Http 请求以规避“同源策略”,然后获取对应的 Web 页面。

  7. Http Proxy 把接收的 Web 页面返回给浏览器,浏览器对接收的页面进行渲染。

Selenium 2.0 的工作原理

  Selenium 2.0,又称 Selenium WebDriver,其原理是:使用浏览器原生的 WebDriver 实现页面操作。实现方式完全不同于 Selenium 1.0。Selenium WebDriver 是典型的 Server-Client 模式,Server 端就是 Remote Server。以下是 Selenium 2.0 工作原理:

图3 Selenium WebDriver 的执行流程

  1. 当使用 Selenium 2.0 启动浏览器时,后台会同时启动基于 WebDriver Wire 协议的 Web Service 作为 Selenium 的 Remote Server,并与浏览器绑定。之后,Remote Server 就开始监听 Client 端的操作请求;
  2. 执行测试时,测试用例会作为 Client 端,将需要执行的页面操作请求以 Http Request 的方式发送给 Remote Server 。该 Http Request 的 body,是以 WebDriver Wire 协议规定的 JSON 格式来描述需要浏览器执行的具体操作;
  3. Remote Server 接收到请求后,会对请求进行解析,并将解析结果发给 WebDriver,由WebDriver 实际执行浏览器的操作;
  4. WebDriver 可以看做是直接操作浏览器的原生组件(Native Component),所以搭建测试环境时,通常都需要先下载浏览器对应的 WebDriver。

 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
【学习笔记】《茹炳晟 软件测试52讲》总结、笔记、精选评论

一定要养成总结的习惯 ,日总结、周总结、月总结、项目总结、版本总结、课外学习总结等等 要记住 越总结、越成长! 总结测试方法,总结Bug原因,奇葩Bug等等等等,这些将会成为你日后工作的宝...

涅槃Ls
2018/07/31
0
0
偷偷告诉你【秘籍】软件测试进阶学习指南!——2020新版

进入2020年所有企业都会全面拥抱互联网,这会给测试行业带来迅猛发展的新机遇,越来越多的人也希望自己未来可以从事软件测试工作。 由于之前测试行业发展相对来说比较鲁莽,相应的学习资料以...

爱码小哥
05/28
0
0
偷偷告诉你【秘籍】软件测试进阶学习指南!——2020新版

进入2020年所有企业都会全面拥抱互联网,这会给测试行业带来迅猛发展的新机遇,越来越多的人也希望自己未来可以从事软件测试工作。 由于之前测试行业发展相对来说比较鲁莽,相应的学习资料以...

爱码小哥
05/28
0
0
自动化测试概述

转载:https://airtest.doc.io.netease.com/tutorial/0automatedtesting/ 序 | 自动化测试概述 引言 如何让零基础的同学掌握自动化测试? 这是Airtest团队五年以来一直在努力做的事情:通过不...

osc_le99a4hf
2019/08/09
3
0
自动化测试学习笔记(一)基础知识

1、静态自动化:代码检测,类似于编程工具的编译系统 2、动态自动化: 基于浏览器和DOM对象的自动化,selenium,watir,autoit; 基于GUI测试的自动化,模拟用户使用行为,调用api接口程序,...

osc_k6z4gwqi
2018/08/09
1
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-07-10

更新时间: 2020-07-10 01:15 US Supreme Court deems half of Oklahoma a Native American Reservation - (reuters.com) 美国最高法院认为俄克拉荷马州的一半是印第安人保留地 得分:131 | 评...

FalconChen
59分钟前
16
0
OSChina 周五乱弹 —— 求求你吃了我吧,不要再玩弄食物的感情了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :张喆的单曲《陷阱 》 这首歌已经在网易找不到原唱了,不知道被哪家买了版权。#今日歌曲推荐# 《陷阱 》- 张喆 手机党少年们想听歌...

小小编辑
今天
26
1
清华陈文光教授:AI 超算基准测试的最新探索和实践。

道翰天琼认知智能平台为您揭秘新一代人工智能。 无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。 而现在伴随着人工智能的发展,大...

jackli2020
今天
7
0
@RequestMapping, consumes 提交简单有意思的测试

getParm @GetMapping("getParm")public Result getParm(String id){ System.out.println(); return ResultFactory.success(id);} 等同于 == bodyParm @PostMapping("bodyParm......

莫库什勒
今天
25
0
63. Unique Paths II

题目: 63. Unique Paths II A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any p......

JiaMing
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部