Selenium与WebDriver的关系
Posted helen66
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium与WebDriver的关系相关的知识,希望对你有一定的参考价值。
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 使用的是系统的内部接口或函数,首先是找到这个元素的坐标位置,并在这个坐标点触发一个鼠标左键的单击操作。
以上是关于Selenium与WebDriver的关系的主要内容,如果未能解决你的问题,请参考以下文章
Chrome如何设定webdriver=undefined以避免Selenium检测?
已下载 Selenium Webdriver Java zip,但缺少 selenium JAR