1.产生背景

Selenium工具诞生的时间已经超过了10年,目前已经在软件开发公司中得到大规模的应用。2004年,在ThoughtWorks公司,一个名为Jason Huggins的测试同行为了减少手工测试的工作量,自己实现了一套基于JavaScript语言的代码库,使用这套库可以进行页面的交互操作,并且可以重复地在不同浏览器上进行各种测试操作。通过不断地改进和优化,这个代码库逐步发展成Selenium Core。Selenium Core为Selenium Remote Control(RC)和Selenium IDE提供了坚实的核心基础能力。

当时的自动化测试工具比较稀少,现有的工具也不够灵活地支持各种复杂的测试操作,大部分测试人员只能使用手工的方式完成Web产品的测试工作。开发人员不断地开发代码,测试人员不断地发现bug,开发人员不断地修改bug,测试人员不断地回归测试来确认bug是否被修正,并且确认程序没有引入新的bug。这样的产品开发模式,导致测试人员必须经常性地手工回归测试系统的大部分功能,由此产生了大量的重复性手工操作。Jason Huggins想改变这样的现状,所以他开发了基于JavaScript语言的代码库,希望帮助测试人员从日常的重复性工作中解脱出来。经过不懈地努力,Selenium 1版本诞生了。

Web自动化测试工具Selenium是划时代的,因为它允许测试工程师使用多种开发语言来控制不同类型的浏览器,从而实现不同的测试目标。Selenium是开源工具软件,用户无须付费就可以使用它,甚至可以根据自己的使用需求来进行深入的定制化,改写其原有的一些功能。基于以上说明的优点,越来越多的测试人员开始使用此工具来进行Web系统的自动化测试工作。在短短几年时间内,全世界范围内都出现了Selenium工具的忠实拥护者,目前中国的几大互联网公司均使用Selenium作为Web自动化测试实施的主要工具。

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

2006年,Google的工程师Simon Stewart开启了一个叫作WebDriver的项目,此项目可以直接让测试工具调用浏览器和操作系统本身提供的内置方法,以此来绕过JavaScript环境的沙盒限制,WebDriver项目的目标就是为了解决Selenium的痛处。2008年,Selenium和WebDriver这两个项目进行了合并,Selenium 2出现了,也就是我们现在常常看到的Selenium WebDriver(简称WebDriver)。

Selenium 2=Selenium 1 +WebDriver。

Selenium的官网地址是www.seleniumhq.org,网站提供了Selenium WebDriver的安装文件和使用教程。Selenium 2是Selenium 1的升级版本,它本身向下兼容Selenium 1的所有功能,同时又提供了更多的新API来完成自动化测试的各种复杂需求。现阶段,Selenium 1已经退出了历史舞台,大部分Web自动化测试人员已经完全转向使用Selenium 2(WebDriver)来搭建自己的自动化测试框架。本课程将基于Selenium 2的WebDriver API进行讲解。

2.概述

Selenium是用于Web应用程序的自动化测试工具。基于Selenium的测试用例会直接运行在浏览器中,就像真正的用户在操作一样。其支持的浏览器范围非常广泛,包括各个平台的主流浏览器。Selenium的主要功能包括:

1)功能性测试:创建回归测试验证软件功能和用户需求。

2)兼容性测试:测试应用程序在不同的操作系统和不同的浏览器中是否运行正常。

值得注意的是,Selenium并不适用于进行网站后台性能方面的测试。但是结合其他第三方工具,Selenium可被用于对网站前端性能进行适当的评估。

Selenium源于ThoughtWorks公司,已经在全球范围内遍地开花。Selenium能在测试领域成为一棵常青树,与其开源性和开放性密不可分。

WebDriver支持的浏览器版本:

  • Google Chrome
  • IE6、7、8、9、10、11
  • Mac操作系统的Safari默认版本均支持
  • Firefox的大部分版本
  • Opera
  • HtmlUnit
  • Android手机操作系统的默认浏览器
  • IOS手机操作系统的默认浏览器

3.版本

(1)Selenium Core

是使用HTML的方式来编写测试脚本。

(2)Selenium IDE(集成开发环境)

      Firefox插件,提供图形界面来录制和回放脚本。此插件只是用来做原型的工具,并不希望测试工程师使用此工具来运行大批量的测试脚本。此插件需要使用第三方的JavaScript代码库才能支持循环和条件判断。

(3)Selenium 1(Selenium RC)

     早期的Selenium使用的是Javascript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的:自动化Web操作。这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。

(4)Selenium Grid

     可以在多个测试环境以并发的方式执行测试脚本,实现测试脚本的并发执行,缩短大量测试脚本的执行时间。

(5)Selenium2

当Selenium2.x 提出了WebDriver的概念之后,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。(甚至包括了AndroidDriver和iOS WebDriver)

WebDriver Wire协议是通用的,也就是说不管是FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。例如FirefoxDriver初始化成功之后,默认会从http://localhost:7055开始,而ChromeDriver则大概是http://localhost:46350之类的。接下来,我们调用WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上是一个HTTP request给监听端口上的Web Service。在我们的HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做社么事情。

在我们new一个WebDriver的过程中,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配。接着就在目标浏览器里启动一整套Web Service,这套Web Service使用了Selenium自己设计定义的协议,名字叫做The WebDriver Wire Protocol。这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等等等等。

  • 主要新特性就是将WebDriver API集成进Selenium RC,从而解决Selenium 1所面临的一系列局限性问题。
  • Selenium 2不与任何的测试框架绑定,这样便于与其他测试工具进行集成,如JUnit或TestNG等。
  • WebDriver的实现和具体的浏览器相关,包括HtmlUnit Driver、Firefox Driver、Chrome Driver、Internet Explorer Driver等。
  • Selenium 2相较于Selenium 1还有一个重要变化,用户可以通过WebDriver来测试手机应用,无论在模拟器上还是真实设备上。

(6)Selenium3

  • 会移除原有的Selenium Core的实现部分,并且Selenium RC的API也将被去掉。

4.Selenium2的原理

selenium1是thoughtworks公司的一个产品经理为了解决重复烦躁的验收工作,写的一个自动化测试工具,其是用JS注入的方式来模拟人工的操作,但是由于JS的同源策略,也就是JS只能在一个域中的页面进行通讯,如果跨域,则就不能访问了,所以导致了如果页面中有iframe时,就无法操作了。

selenium2是selenium+webdriver的产物,webdriver是google的产品,google收购selenium1后,整合了其自己的webdriver,推出了selenium webdriver,也就是我们所说的selenium 2。selenium2很好地解决了这个JS注入的安全性问题,其实现原理就从根本上改变,selenium2在启动webdriver的过程中,会首先确认比较浏览器与driver是否匹配,如果匹配,就会启动浏览器,然后把浏览器绑定在某一个端口,且在浏览器中启动一整套web service,这套web service使用了selenium2自己定义的协议,这套协议在主流浏览器中是通用的,然后浏览器此时就作为了一个server,测试脚本就作为了一个client,client发送的任何一个selenium2的API都被转成了一个http request,当web service接收到这个request后,就会响应,这套协议就会告诉浏览器这时候需要干什么事。

006-Selenium简介的更多相关文章

  1. Selenium简介(二)--基于CORE/IDE的简单应用

    参考  http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍  http://blog.csdn.net/iam ...

  2. 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础

    第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...

  3. Robot Framework和Selenium简介

    1.1  RF简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于 ...

  4. 自动化测试基础篇--Selenium简介

    摘自https://www.cnblogs.com/sanzangTst/p/7452636.html 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software Testing) ...

  5. 引用 自动化测试基础篇--Selenium简介

    原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...

  6. 跟浩哥学自动化测试Selenium -- Selenium简介 (1)

    Selenium 简介 Selenium 是一款开源的web自动化测试工具,用来模拟对浏览器的操作(主要是对页面元素的操作),简单来讲,其实就是一个jar包.Selenium早期的版本比如1.0市场占 ...

  7. python + selenium - selenium简介

    1. 产品简介 selenium 是 基于 web网页的UI自动化测试框架. 1)支持多浏览器操作:ie.chrome.firefox.edge.safaria等 2)跨平台:windows.linu ...

  8. selenium 简介 及浏览器配置

    简介: Selenium是一款基于web应用程序的开源测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.Selenium是一个自动化的web应用功能测试工具. Seleniu ...

  9. selenium简介

    Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行.Selenium真的不是一个单一的工具,而是一套工具,帮助测试者更有效地基于Web的 ...

  10. 【转】selenium简介及安装方法

    转自:http://www.cnblogs.com/fnng/p/3157639.html 1. selenium 介绍 selenium 是一个web 的自动化测试工具,不少学习功能自动化的同学开始 ...

随机推荐

  1. FCKeditor使用方法技术详解

    转载自 http://www.cnblogs.com/cchyao/archive/2010/07/01/1769204.html 1.概述 FCKeditor是目前最优秀的可见即可得网页编辑器之一, ...

  2. jQuerySchool

    jQUery

  3. Android 内存溢出解决方案(OOM) 整理总结

    在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总 ...

  4. SQLite Databases 数据存储

    SQLite Databases数据存储 使用 推荐xutils dbutil package com.practicezx.jishibang.sqlite; import java.io.File ...

  5. CSS布局口诀 - CSS BUG顺口溜

    在进行CSS网页布局时遇到BUG,请认真阅读以下内容,非常容易记忆的,不知道哪位高人把CSS BUG编成了顺口溜了!看看好不好记住呢? 一.IE边框若显若无,须注意,定是高度设置已忘记: 二.浮动产生 ...

  6. [C和指针]第四部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. Android——android必看 各个控件属性(网上看到的文字,觉得挺好的,珍藏了)

    属性 值 说明 Android:orientation horizontal/vertical 设置布局水平还是垂直,默认是垂直 android:checked true/false 标记默认选中,如 ...

  8. js实现页面传值

    今天做东西用到,在网上查到了这样的一种方法,学习学习: 来源:http://bbs.csdn.net/topics/310229114 Page1: <!DOCTYPE html PUBLIC ...

  9. 【原】使用SQLite打开本地*.db文件

    1.下载安装文件:官网下载地址:http://www.sqlite.org/download.html32位安装包:http://www.sqlite.org/2016/sqlite-tools-wi ...

  10. 装了maven插件的eclipse中M2_REPO无法编辑、删除(转)

    今天用了新版本的eclipse,用maven在命令行生成了一个普通项目.导入eclipse之后发现本地仓库的路径不正确. 显示的为 user.path/.m2/repository 但是我的仓库早已经 ...