前言: 总感觉自己的Selenium用的很溜,很熟悉了,现在发现比较零碎,不是那么的系统,所以想要总结下Selenium相关的知识点,作为回顾总结;然后就想写一系列的,从零开始,不知道是不是能够坚持在业余时间内总结完Selenium一系列的知识点。
目录
Selenium是什么?
Selenium是一个免费的(开源)自动化测试组件,适用于跨不同浏览器和平台的Web应用程序。它非常类似于HP Quick Test Pro (QTP现在叫UFT),只是Selenium侧重于自动化基于Web的应用程序。使用Selenium工具进行的测试通常称为Selenium测试。
Selenium不仅仅是一个工具,而是一套软件,每个软件都满足组织的不同测试需求。它有四个组成部分:
- Selenium集成开发环境(IDE)
- Selenium远程控制 (RC)
- WebDriver
- Selenium Grid
目前,Selenium RC和WebDriver被合并到一个框架中,形成Selenium 2;Selenium 1是指Selenium RC。
谁开发了Selenium?
由于Selenium是不同工具的集合,所以它也有不同的开发人员。下面是对Selenium项目做出显著贡献的关键人物。
Selenium最初是由Jason Huggins在2004年创建的。作为ThoughtWorks的一名工程师,他正在开发一个需要频繁测试的Web应用程序。在意识到对他们的应用程序进行重复的手工测试变得越来越低效之后,他写了一个JavaScript程序来自动控制浏览器的操作。他将这个程序命名为“JavaScriptTestRunner”。
他看到了这个想法在帮助自动化其他Web应用程序方面有着巨大的潜力,于是将JavaScriptRunner开源,后来被重新命名为Selenium Core。
同源政策问题
同源策略禁止JavaScript代码访问与其启动位置不同域中的元素。例如,www.google.com中的HTML代码使用了一个JavaScript程序“randomScript.js”。同源策略只允许randomScript.js访问google.com中的页面,比如google.com/mail,google.com/login,or google.com/signup。但是,它不能访问来自不同站点的页面,比如yahoo.com/search或baidu.com,因为它们属于不同的域。
这就是为什么在Selenium RC之前,测试人员需要安装Selenium Core(一个JavaScript程序)和一个包含被测试的Web应用程序的web服务器的本地副本,以便它们属于同一个域。
Selenium RC的诞生
不幸的是,由于同源策略的限制,使用Selenium Core的测试人员必须在他们自己的本地计算机上安装整个测试应用程序和web服务器。因此ThoughtWork的另一位工程师Paul Hammant决定创建一个服务器,作为HTTP代理来“欺骗”浏览器,使其相信Selenium Core和正在测试的web应用程序来自同一个领域。这个系统被称为Selenium Remote Control或Selenium 1。
Selenium Grid的诞生
Selenium Grid是由Patrick Lightbody开发的,目的是尽可能减少测试执行时间。他最初将该系统称为“Hosted QA(托管QA)”。它能够在重要的阶段捕获浏览器截图,并同时向不同的机器发送Selenium命令。
Selenium IDE的诞生
日本的Shinya Kasatani开发了Selenium IDE,这是一个Firefox扩展,可以通过录制和回放功能自动操作浏览器。他提出这个想法是为了进一步提高创建测试用例的速度。2006年,他向Selenium项目捐赠了Selenium IDE。
WebDriver的诞生
Simon Stewart在2006年左右创建了WebDriver,当时浏览器和Web应用程序正变得越来越强大,对Selenium Core等JavaScript程序的限制也越来越多。它是第一个可以从操作系统级别控制浏览器的跨平台测试框架。
Selenium 2 的诞生
2008年,整个Selenium团队决定合并WebDriver和Selenium RC,形成一个更强大的工具Selenium 2,以WebDriver为核心。目前,Selenium RC虽然还处于开发阶段 但只是处于维护模式。Selenium项目的大部分工作现在都集中在Selenium 2上,于2016年7月Selenium3已经出来了,目前Selenium4在alpha阶段。
Selenium3的诞生
Selenium3.0于2016年发布,支持Java8+,Selenium3.0中的Firefox驱动独立了,使用geckodriver,该驱动要求Friefox浏览器必须48版本以上;Safari是苹果公司的浏览器,然后,它也早就实现了多平台的支持,同样可以在Windows下运行,然而,它的驱动比较有意思,是集成到Selenium Server中的。也就是说你想让自动化测试脚本在Safari浏览器上运行,必须使用Selenium Server。
为什么叫Selenium呢?
它来自一次Jason给他的团队讲的一个笑话。在Selenium的开发过程中,另一个自动化测试框架非常流行,它是由Mercury Interactive公司开发的(没错,该公司在QTP被惠普收购之前最初是开发QTP的)。由于Selenium(硒)是一种著名的Mercury(汞)中毒解毒剂,Jason建议用这个名字。他的队友们接受了这个框架,这就是我们如何把这个框架称为现在的框架。
Selenium IDE简介
Selenium集成开发环境(IDE)是Selenium套件中最简单的框架,也是最容易学习的框架。它是一个Firefox插件,您可以像使用其他插件一样轻松地安装它。然而,由于它的简单性,Selenium IDE只应该用作原型工具。如果您想创建更高级的测试用例,您将需要使用Selenium RC或WebDriver,现在已经没人再使用这个东西了。
优劣势如下图:
Selenium RC简介
Selenium RC长期以来一直是整个Selenium项目的旗舰测试框架。这是第一个允许用户使用他们喜欢的编程语言的自动化web测试工具。从2.25.0版开始,RC可以支持以下编程语言:
- Java
- C#
- PHP
- Python
- Perl
- Ruby
优劣势如下:
WebDriver简介
Web驱动程序在很多方面都比Selenium IDE和Selenium RC更好。它实现了一种更加现代和稳定的方法来自动化浏览器的操作。与Selenium RC不同,WebDriver不依赖JavaScript实现自动化。它通过直接与浏览器通信来控制浏览器。
所支持的语言与Selenium RC中的语言相同:
- Java
- C#
- PHP
- Python
- Perl
- Ruby
优劣势如下图:
Selenium Grid
Selenium Grid是一个与Selenium RC一起使用的工具,可以在不同的机器和不同的浏览器上同时运行并行测试。意味着同时并行执行多个测试用例。
特性:
- 支持在多个浏览器和环境中同时运行测试。
- 极大的节省了时间。
- 利用hub-and-nodes(中心和节点)的概念。Hub充当连接到它的每个节点的Selenium命令的中心源。
关于浏览器和环境支持的注意事项
由于架构上的差异,Selenium IDE、Selenium RC和WebDriver支持不同的浏览器和操作环境。
Selenium IDE | WebDriver | |
支持浏览器 | Mozilla Firefox | Internet Explorer 6~11,32位 和62位; Microsoft Edge 12.10240及以上版本(支持部分正在开发的一些功能); Firefox 3.0+ Google Chrome 12.0+ Opera 11.5+ Android - 2.3+适用于手机和平板(设备和模拟器) iOS 3+适用于手机(设备和模拟器),3.2+适用于平板电脑(设备和模拟器) HtmlUnit 2.9+ |
操作系统 | Windows, Mac OS X, Linux | 以上浏览器可以运行的所有操作系统。 |
注:Selenium WebDriver是Selenium RC的继承者,Selenium RC已被SeleniumHQ正式宣布弃用。
Selenium与QTP(现在的UFT)的比较
Quick Test Professional(QTP)是一种专有的自动化测试工具,在2006年被惠普收购之前,它曾属于Mercury Interactive公司。Selenium工具套件比QTP有许多优点,具体如下所示:
Selenium优于QTP的优点
Selenium | QTP |
开源,免费使用,免费 | 商业的 |
高扩展性 | 有限的附加组件 |
可以在不同的浏览器上运行测试 | 只能在Firefox、IE和Chrome中运行测试 |
支持多种操作系统 | 只能在Windows中使用 |
支持移动设备 | QTP支持移动应用程序测试自动化(iOS和Android)使用HP解决方案称为- HP移动中心 |
可以在最小化浏览器的情况下执行测试吗 | 需要使测试中的应用程序在桌面上可见 |
可以并行执行测试 | 只能顺序执行,但使用质量中心,这又是一个付费产品。 |
QTP优于Selenium的优点
QTP | Selenium |
可以同时测试Web和桌面应用程序 | 只能测试Web应用程序 |
附带一个内置的对象存储库 | 没有内置的对象存储库 |
自动化速度比Selenium更快,因为它是一个功能齐全的IDE。 | 自动化速度较慢,因为它没有本地IDE,而且只有第三方IDE可以用于开发 |
数据驱动测试更容易执行,因为它有内置的全局和本地数据表。 | 数据驱动测试更麻烦,因为您必须依赖编程语言的功能来为测试数据设置值 |
可以访问浏览器中的控件(如收藏夹栏、地址栏、后退和前进按钮等)。 | 无法访问被测试Web应用程序之外的元素 |
提供专业的客户支持 | 没有提供官方用户支持。 |
具有将测试数据导出到本机外部的功能 | 没有将运行时数据导出到本机外部的功能 |
建立参数化支持 | 参数化可以通过编程实现,但是很难实现。 |
测试报告是自动生成的 | 不支持生成测试/bug报告。 |
虽然很明显,QTP具有更高级的功能,但是Selenium在三个主要方面超过了QTP:
- 成本(因为Selenium是完全免费的)
- 灵活性(因为Selenium可以支持多种编程语言、浏览器和平台)
- 并行测试(这是QTP能够做到的,但只有使用质量中心)
总结:
整个Selenium工具套件由四个组件组成:
- Selenium IDE,一个Firefox插件,您只能在创建相对简单的测试用例和测试套件时使用它。
- Selenium RC,也称为Selenium 1,它是第一个允许用户使用编程语言创建复杂测试的Selenium工具。
- WebDriver是一个新的突破,它允许您的测试脚本直接与浏览器通信,从而从操作系统级别控制它。
- Selenium Grid也是一个工具,它与Selenium RC一起用于跨不同的浏览器和操作系统执行并行测试。
- Selenium RC与WebDriver合并形成Selenium 2,现已经更新到了Selenium 3 和Selenium 4。
- Selenium在成本和灵活性方面比QTP更有优势。它还允许您并行地运行测试,而不像在QTP中,您只允许顺序地运行测试。