Helen_66

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2004年,Thought Works公司一个名为Jason Huggins的兄弟为了减少手机测试的工作量,实现了一套基于JavaScript的代码库,使用这套代码库可以进行页面的交互操作,并且可以重复地在不同浏览器上进行各种测试操作,通过不断改进和优化,这个代码库逐渐成为Selenium Core。Selenium Core为Selenium Remote Control (RC) 和 Selenium IDE提供了坚实的核心基础能力。

随着互联网技术的不断发展以及浏览器对于JavaScript语言的安全限制,Selenium的发展也遇到了很多难以解决的困难。由于其自身实现的机制,Selenium无法突破浏览器沙盒的限制,导致很多测试场景的测试需求难以被实现。

2006年,Google的工程师Simon Stewart开启了WebDriver的项目,此项目可以让测试工具调用浏览器和操作系统本身提供的内置方法,以此来绕过JavaScript环境的沙盒限制。

2008年,Selenium和WebDriver两个项目进行合并,至此,Selenium2.0出现了 (Selenium2.0 = Selenium + WebDriver)

2016年10月,Selenium3.0诞生,实现了把核心API跟客户端driver进行分离,同时去掉用的越来越少的Selenium RC功能。

----------------------------------------------------

Selenium1.0 (Selenium RC或 Remote Control)工具的核心部分是基于JavaScript代码库实现的

Selenium 1.0的自动化测试执行步骤如下:

1、测试人员基于Selenium支持的编程语言编写好测试脚本程序

2、测试人员执行测试程序

3、测试脚本程序发送访问网站的HTTP请求给Remote Control Server (RC)

4、RC收到请求后,访问被测试网站并获取网页数据内容,并在网页中插入Selenium Core的JavaScript代码库,然后返回给测试人员执行测试的浏览器

5、测试脚本在浏览器内部再调用Selenium Core来执行测试代码逻辑,最后记录测试的结果,完成测试。

以上的第4步是基于浏览器的JavaScript安全机制--同源策略,为了绕过浏览器的安全机制,Selenium1使用了代理方法来解决此问题,实现机制具体如下:  

1、执行测试脚本,脚本向Selenium Server发起请求,要求和Selenium Server建立连接

2、Selenium Server的 Launcher 启动浏览器,向浏览器中插入Selenium Core 的JavaScript代码库,并把浏览器的代理设置为 Selenium Server 的 HTTP Proxy

3、测试脚本向 Selenium Server 发送 HTTP 请求,Selenium Server 对请求进行解析,然后通过 HTTP Proxy 发送JS命令通知 Selenium Core 执行操作浏览器的动作

4、Selenium Core 接收到指令后,执行测试脚本指定的网页操作命令

5、浏览器收到新的页面请求信息(在第4步中,Selenium Core 的操作可能引发新的页面请求),于是发送HTTP请求给 Selenium Server 的 HTTP Proxy,请求新的Web页面

6、由于 Selenium Server 在启动浏览器时将浏览器的代理访问地址设置为  Selenium Server 的 HTTP Proxy,所以  Selenium Server 会接收到所有由它启动的浏览器发送的请求。 Selenium Server接收到浏览器发送的HTTP请求后,重组HTTP请求,获取对应的Web页面

7、 Selenium Server 的HTTP Proxy 把接收到的Web页面返回给浏览器

通过以上步骤,达到了将 Selenium Core 的JaveScript 代码库插入到被测试网页的目的,然后就可以基于此代码库在被测网页中进行各种自动化测试操作了。

--------------------------------------------------------------

WebDriver 的实现原理:

WebDriver直接利用了浏览器的内部接口来操作浏览器。

对于不同平台中的不同浏览器,必须依赖浏览器内部的 Native Component (原生组件)来实现把对WebDriver API 调用转化为对浏览器内部接口的调用。

Selenium 1.0采用JavaScript的合成事件来处理网页元素的操作,例如要单击某个页面元素,要先使用JavaScript 定位到这个元素,然后触发单击事件。

而 WebDriver 使用的是系统的内部接口或函数,首先是找到这个元素的坐标位置,并在这个坐标点触发一个鼠标左键的单击操作。

 

posted on 2019-01-27 16:14  helenju  阅读(670)  评论(0编辑  收藏  举报