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. 双击Button按钮后执行的函数

    在MFC中,当在用户界面拖入一个button后,双击会进入cpp文件,实现一个按钮点击的方法如: void CtestcontorlDlg::OnBnClickedButton() { : } 理解: ...

  2. strip_tags,htmlspecialchars,htmlentities,stripslashes,addslashes学习小结

    一.strip_tags 从字符串中去除 HTML 和 PHP 标记 string strip_tags ( string $str [, string $allowable_tags ] ) str ...

  3. SqlSever基础 delete 删除一个表中的所有数据

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. 友情提醒:欲开发android5.0以上应用,请全部更新开发工具至最新

    周末帮人完成一个项目,android5.0以上版本,谁知道被开发工具折腾的死去活来.我的开发环境是adt-bundle-windows-x86-20140702.zip版本,也是目前能找到的adt-b ...

  5. .Net自帶Ajax和GridView

    如圖所示,在新建web窗體后的工具欄中有一個 AJAX擴展 ScriptManager 在整個網頁中有且只有一個,使用母版頁和用戶控件中尤為注意, 例如在嵌套母版頁和用戶控件時只在最外層加上Scrip ...

  6. Git恢复reset --hard丢失的文件

    在使用 Git 的过程中,有时会不小心丢失 commit 信息.这一般出现在以下情况下:强制删除了一个分支而后又想重新使用这个分支,hard-reset 了一个分支从而丢弃了分支的部分 commit. ...

  7. 查看博客模板的css代码

    1.可以去模板列表里选择一个模板 http://www.cnblogs.com/Skins.aspx 目前使用的模板是http://www.cnblogs.com/SkinUser.aspx?Skin ...

  8. shell 标出输入、标准输出、错误输出

    shell中可能经常能看到:>/dev/null  2>&1  eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...

  9. [HDOJ5943]Kingdom of Obsession(最大匹配,思路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:n个人编号为[s+1,s+n],有n个座位编号为[1,n],编号为i的人只能坐到编号为它的 ...

  10. FormsAuthentication.HashPasswordForStoringInConfigFile 方法 之研究

    摘自:http://time-is-life.cnblogs.com/articles/322523.html 给定标识哈希类型的密码和字符串,该例程产生一个适合存储在配置文件中的哈希密码. [C#] ...