Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。
用“一个工具”这样的字眼来形容Selenium并不恰当。Selenium是一套WEB应用的测试框架,为了满足不同的需要,它提供了几个组件形成了所谓的“Selenium”家族。其家族成员后面的文章中有介绍。
起源
Jason Huggins,当时在ThoughtWorks工作,2004年发起了Selenium项目。Jason和他所在的团队采用Javascript编写一种测试工具来验证浏览器页面的行为;这个JavaScript类库就是Selenium core,同时也是seleniumRC、Selenium IDE的核心组件。Selenium由此诞生。
后来,在 Paul Hammant 加入团队后并指导开发第二种操作模式(后来成为“Selenium Remote Control”(RC))。
2007年,Jason Huggins加入Google。与其他人一样,Jennifer Bevan,他继续发展和稳定Selenium RC的功能。与此同时,ThoughtWorks的Simon Stewart开发了一个名为WebDriver的高级浏览器自动化工具。Simon希望能通过浏览器、操作系统的底层方法等一些手段来直接操作浏览器;这样就避免了在Java Script的沙箱环境里存在的那些限制了,Web Driver项目就此诞生!2009年,在Google测试自动化会议上,开发人员举行了一次会议,会议决定合并这两个项目,并称之为新项目Selenium Web Driver,即Selenium2.0。
2008年,Philippe Hanrigou(当时在ThoughtWorks)制作了“Selenium Grid”,它提供了一个中心,允许在任意数量的本地或远程系统上同时运行多个Selenium测试,从而最大限度地减少了测试执行时间。
Selenium 1 和 WebDriver 合并成一款性能更佳的产品 Selenium 2(或 Selenium WebDriver),该款产品发行于 2011 年。
Selenium 2 具有来自 WebDriver 的清晰面向对象 API,并能以最佳的方式与浏览器进行交互。Selenium 2 不使用 JavaScript 沙盒,它支持多种浏览器和多语言绑定。
Selenium 1.x
用下面的图来说明 Selenium 1.x 各部分的功能
Selenium由几个组件组成,每个组件在帮助开发web应用程序测试自动化方面都扮演着特定的角色。
Selenium IDE | 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。 那么什么情况下用到它呢? 快速的创建 bug 重现脚本,在测试人员的测试过程中,发现了bug 之后可以通过 IDE 将重现的步骤录制下来,以帮助开发人员更容易的重现bug。 IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本。 |
Selenium Grid | 支持分布式测试,即可以在不同平台、不同浏览器的多台远程机器上同时运行Selenium测试脚本,从而提高测试效率,减少执行时间。 是一种自动化的测试辅助工具,Grid 通过利用现有的计算机基础设施,能加快WebApp的功能测试。利用Grid,可以很方便地同时在多台机器上和异构环境中并行运行多个测试事例。其特点为:
|
Selenium RC (Remote Control) |
Selenium RC是一个用JAVA语言编写的服务端,可以处理测试脚本发送过来的HTTP请求,来操作浏览器。 是selenium 家族的核心工具,Selenium RC 支持多种不同的语言编写自动化测试脚本,通过selenium RC 的服务器作为代理服务器去访问应用从而达到测试的目的。
|
Selenium Core | 是被Selenium Server 嵌入到浏览器页面中的。Selenium Core就是一堆JavaScript函数的集合,就是通过这些JavaScript函数,我们才可以实现用程序对浏览器进行操作。 |
Launcher | 用于启动浏览器,把Selenium Core 加载到浏览器页面当中,并把浏览器的代理设置为Selenium Server 的Http Proxy。 |
Selenium2.x
Selenium 2.x中包括了WebDriver。其实在Selenium2.0中主推的就是WebDriver这个模块。事实上WebDriver是Selenium RC的替代品,因为Selenium需要保留向下兼容性的原因,Selenium RC才没有被彻底的抛弃,如果使用Selenium开发一个新的自动化测试项目,那么我们强烈推荐使用Selenium2.0的WebDriver进行编码。
Selenium2.0 = Selenium1.0 + WebDriver
Selenium RC 的实质是在浏览器中运行一个JavaScript应用程序,使用每个浏览器内置的JavaScript解释器来解释和执行Selenium的命令集合。
Selenium WebDriver 与上述的Selenium RC是不同的。WebDriver针对不同的浏览器进行开发,取代了RC那样嵌入到被测试的WebApp程序中的JavaScript,使用了与浏览器更加集成的方式进行测试,避免了RC使用JavaScript而可能遇到的安全模型限制导致的问题等。
WebDriver是测试脚本的的核心。在测试脚本中,通过调用WebDriver对象的方法来操作浏览器。
简而言之,Selenium IDE是为了方便录制,Selenium Grid是为了提升执行效率,Selenium RC/WebDriver是脚本编写的核心。
Selenium RC的工作原理是,在测试脚本执行之前,需要启动Selenium服务端,通过注入JavaScript形成沙箱环境,在沙箱环境中完成测试脚本中指定的浏览器操作。
WebDriver是从浏览器外部来控制的,通过调用浏览器原生接口来驱动,完成页面操作。比如说,当我们的脚本操作Firefox浏览器的时候,WebDriver是用JavaScripts来调用API的,而当我们操作IE浏览器的时候,WebDriver就用C++了。
由于有一些页面元素在沙箱和浏览器上的展示有很大出入,因此调用浏览器原生接口或许是控制浏览器的最好方式了。但问题是,如果有新的浏览器问世,WebDriver API就无法支持,而Selenium RC可以。
Selenium RC与WebDriver合并之后,也就是Selenium2.0之后,对于主流的浏览器Chrome、IE、Firefox上的页面操作,可以基于各自的Driver文件,而无须启动服务端。同时,还支持RemoteWebDriver,使用方式与Remote Control一致。
Selenium 3.x
2016年10月 Selenium 3.x 发布了。
Selenium 4.x
现在,可以在Selenium官网下载最新的版本:https://www.selenium.dev/downloads/
Selenium对多浏览器的支持:Chrome、IE、Firefox、Safari、Opera、Edge
Selenium 3 和 Selenium 4的异同
Selenium 3 | Selenium 4</ |