第1章  Selenium自动化测试框架入门

1.1  Selenium自动化测试框架概述

  说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium。

  图1-1是某企业招聘自动化测试工程师的信息,大家可以看到在岗位任职条件方面明确指出要求应聘者具有Selenium等主流自动化测试工具的使用经验。

图1-1
 某企业自动化测试工程师招聘信息

  那么Selenium是谁开发的?它是用来解决什么问题的?它为什么会被自动化测试人员广泛使用呢?

  在日常的软件测试工作中,功能测试是软件测试的重要环节,而手动的功能测试有许多缺点,其中主要的缺点是测试过程单调且重复,这种长时间的重复操作容易使人厌倦、出错。2004年,Thoughtworks的工程师Jason Huggins决定使用自动化测试工具来改变这种状况。他开发了一款名为JavaScriptTestRunner的JavaScript程序,这款JavaScript程序可以自动进行Web应用程序的功能测试。同年,JavaScriptTestRunner更名为Selenium。

  Selenium是开源的,可以在GitHub上找到,如图1-2所示。Selenium是大型项目,包含用于支持Web浏览器自动化的一系列工具和库。

图1-2  GitHub上的Selenium项目信息

  从图1-2可以看出,在Selenium项目的仓库中共有19个子项目,这也验证了Selenium确实是大型项目。这里我们只关注Selenium的核心内容,而不去关注其他辅助性的子项目。

1.2  Selenium的历史版本及核心组件

  在写作本书时,Selenium的最新可获取版本是Selenium 4.0 alpha版本,而稳定版本是Selenium 3.0,对应的可下载版本是Selenium 3.141.0。为了使读者能够系统地掌握Selenium,我认为非常有必要了解Selenium的历史版本及核心组件,Selenium的核心组件如图1-3所示。

图1-3  Selenium的核心组件

1.2.1  Selenium 1.0

1.Selenium IDE

  2006年,Shinya
Kasatani 开发了Selenium IDE的第一个版本,当时它是Firefox浏览器的一个插件。通过该插件,在Firefox浏览器中实现业务功能时,能够自动录制业务功能脚本,如图1-4所示。你还可以根据需要将产生的脚本转换为Python、Java、Ruby、C#等脚本信息,如图1-5所示。录制的脚本或者由脚本产生的脚本信息可以回放,从而验证功能的正确性、可用性等。

图1-4  通过Selenium IDE录制脚本

图1-5  由Selenium IDE转换后的Python脚本信息

  Selenium IDE具有以下特点。

  • 操作简单,不要求操作人员具有编码能力。
  • 测试脚本可复用,从而减轻测试人员的重复性操作压力。
  • 可以单个或批量运行测试脚本。
  • 脚本支持命令行调用可用于持续集成。
  • 可以控制脚本的执行速度。
  • 一定程度上支持脚本调试功能,如断点、单步运行等。
  • 可以将脚本导出为使用多种不同语言。

这里只是对Selenium IDE做了简单介绍,后续我们将进行更加详细的介绍。

2.Selenium
Remote Control(RC)

  Paul Hammant开发了Selenium Remote
Control,这里我们将Selenium Remote Control简写成Selenium RC。前面已经介绍过Selenium的核心是JavaScriptTestRunner。JavaScriptTestRunner是一组JavaScript函数,可首先通过使用浏览器内置的JavaScript解释器进行解释和执行Selenese命令,然后再将Selenium Core注入浏览器。但是,这里存在同源策略问题,也就是说,假设有一个JavaScript测试脚本,该脚本要访问baidu.com域,从而访问baidu.com/news、baidu.com/map之类的页面元素,这没有问题,但无法访问epubit.com或bing.com等其他域的元素。因为baidu.com/news和baidu.com/map同源,它们有相同的域,都是baidu.com。那么怎么才能够跨域访问呢?Selenium RC就是用来解决这一问题的,它分为Client Library和Selenium Server两部分。Client Library部分提供了丰富的接口,主要用于编写自动化测试脚本来连接、控制Selenium Server。Selenium Server负责充当客户端配置的HTTP代理,并“欺骗”浏览器以使Selenium Core和被测试的Web应用程序共享相同的来源,接收来自客户端程序的命令,并将它们传给浏览器。

3.Selenium Grid

  Patrick
Lightbody开发了Selenium Grid。Selenium
Grid可以实现在不同的浏览器和操作系统中并行地执行测试脚本,从而最大限度地缩短测试时间,提升工作效率。具体的工作模式如下。

  由一个Hub节点控制若干Node,Hub节点负责管理和收集Node的注册和工作状态等信息,接收远程调用并将相关请求分发给各Node来执行。

1.2.2  Selenium 2.0

Selenium 2.0在Selenium 1.0的基础上添加了对Selenium WebDriver的支持。

1.Selenium
WebDriver

  Selenium WebDriver由Simon Stewart在2006年开发,是一个可以在操作系统级别配置和控制浏览器的跨平台测试框架。Selenium WebDriver可直接与浏览器应用程序进行本地交互。Selenium WebDriver支持各种编程语言,如Python、Ruby、PHP和Perl等,还可以与JUnit和Unittest之类的单元测试框架集成以进行测试管理。

  Selenium WebDriver架构主要包括4部分—— Selenium Client Library、JSON Wire Protocal
Over HTTP Client、Browser
Drivers和Browsers,如图1-6所示。

图1-6  Selenium WebDriver架构

  • Selenium Client Library:Selenium自动化测试人员可以使用Java、Ruby、Python、C#等语言,利用它们提供的库来编写脚本。
  • JSON Wire Protocol Over HTTP Client:JSON Wire
    Protocol是在HTTP服务器之间传输信息的REST风格的API。每个浏览器驱动程序(如FirefoxDriver、ChromeDriver等)都有它们各自的HTTP服务器。
  • Browser Drivers:不同的浏览器都包含一个单独的浏览器驱动程序。浏览器驱动程序与相应的浏览器通信。当浏览器驱动程序接收到任何指令时,将在相应的浏览器中执行,响应信息将以HTTP的形式返回。
  • Browsers:Selenium支持多种浏览器,如Firefox、Chrome、IE、Safari等。

Selenium和WebDriver原本属于两个不同的项目。为了弥补Selenium和WebDriver各自的不足,形成更加完善的Selenium测试框架,才对这两个项目进行了合并。

2.Selenium 3.0

目前发布的稳定版本是Selenium 3.0,Selenium 3.0版本做了以下更新。

  • 去除了Selenium RC组件。
  • Selenium 3.0只支持Java 8及以上版本。
  • 在IE支持方面,只支持IE 9.0以上版本。
  • Selenium 3.0中的Firefox需要使用独立的浏览器驱动。

3.Selenium 4.0

  自从2019年4月发布Selenium 4.0的第一个alpha版本以来,截至目前Selenium 4.0已有4个alpha版本,如图1-7所示。Selenium 给自动化测试从业者带来了更多的期待,那么Selenium 4.0又有什么新特性呢?

图1-7  Selenium 4.0 alpha版本的获取方式(针对Java语言)

  单击4.0.0-alpha-4链接,可以查看对应的Maven依赖信息,如图1-8所示。

  Selenium 4.0主要包括以下新特性。

  • Selenium IDE功能改版:用过Selenium IDE的读者都清楚,之前Selenium IDE以插件的形式运行在Firefox和Chrome浏览器中,改版后将能够用于更多浏览器,同时还提供了全新的基于Node.js的CLI(命令行)运行程序,能够并行执行测试用例,并提供通过和失败的测试用例、执行耗时等相关信息。新的Selenium IDE运行程序完全基于Selenium WebDriver。

图1-8  Selenium 4.0.0-alpha-4的Maven依赖信息

  • WebDriver API成为W3C标准:WebDriver API不仅用于Selenium,还用在很多其他的自动化测试工具(如Appium)中。Selenium新版本最突出的变化是WebDriver API完全遵循W3C标准,这意味着WebDriver API现在可以跨不同的软件实现,而不会出现任何兼容性问题。
  • Selenium Grid改良:如果你以前用过Selenium Grid,一定会遇到一些节点配置方面的问题并记忆深刻。Selenium Grid有两个基础组件—— Node和Hub。Node用于执行测试用例,而Hub用于控制所有执行用例的Node。我们在连接Hub和Node时,经常会出现很多问题。但在Selenium 4.0中,当启动Selenium Grid时,Selenium Grid将同时充当Hub和Node的角色,使得连接过程变得非常容易,从而很好地支持了Docker部署,并且不存在线程问题。Selenium Grid 服务器还可以输出JSON格式的日志文件。在用户界面上,Selenium 4.0也有了很多改良,可以直观地看到执行测试用例的相关信息等。
  • 更直观方便的调试信息:钩子(hook)和请求(request)跟踪的日志记录也得到了改进,因为可调试或可观察性不再仅适用于DevOps。自动化测试人员现在可以更好地使用改进的用户界面来进行调试。
  • 更完善的文档:文档对于任何项目的成功都非常重要。自从Selenium
    2.0发布以来,这些文件已经很多年没有更新了。也就是说,任何想学习Selenium的人都必须依赖旧的教程,但许多特性在Selenium 3.0中已经发生了变化。SeleniumHQ承诺将提供一份新的文档,这也许是自动化测试工程师最期待的更新。

《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门的更多相关文章

  1. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  2. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  3. 关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

  4. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  5. 《Selenium自动化测试实战:基于Python》之 Selenium IDE插件的安装与使用

    第3章  Selenium IDE插件的安装与使用 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.com/292045 ...

  6. 《Selenium自动化测试实战:基于Python》之 Python与Selenium环境的搭建

    第2章  Python与Selenium环境的搭建 购买链接:  京东:https://item.jd.com/13123910.html  当当:http://product.dangdang.co ...

  7. 关于《Selenium 2自动化测试实战 基于Python语言》学习过程中键盘的常用操作

    下边是自己在学习过程中总结的一些常用键盘的操作

  8. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  9. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

随机推荐

  1. PyQt5笔记

    PyQt5 窗口类继承QMainWindow. 1.消息盒子QMessageBox 弹出一个窗口,根据选择的不同执行不同的操作.比如点击关闭后,实用消息盒子确认是否关闭. # 关闭QWidget将产生 ...

  2. console.dir()可以显示一个对象所有的属性和方法

    console.dir()可以显示一个对象所有的属性和方法 具体方法如下:

  3. webpack4.0源码解析之打包后js文件分析

    首先,init之后创建一个简单的webpack基本的配置,在src目录下创建两个js文件(一个主入口文件和一个非主入口文件)和一个html文件,package.json,webpack.config. ...

  4. Web 实时通信方案 All In One

    Web 实时通信方案 All In One HTTP 轮询, 单向通信,开销大 HTTP 长轮询, 单向通信,开销较小 WebSocket,双向通信,开销小 (TCP 高延迟,保证数据完整性) Ser ...

  5. 微信小程序 UI 组件库

    微信小程序 UI 组件库 Vant Weapp 需要注意的是 package.json 和 node_modules 必须在 miniprogram 目录下 $ yarn add @vant/weap ...

  6. how to disabled alert function in javascript

    how to disabled alert function in javascript alert 阻塞主线程 default alert; // ƒ alert() { [native code] ...

  7. qt 向窗口发送消息,键盘输入事件

    #include <windows.h> #include <QtDebug> #include <locale> #include <tchar.h> ...

  8. 「NGK每日快讯」2021.2.2日NGK公链第91期官方快讯!

  9. Masterboxan INC金融:在区块链技术基础上推动业务模式的变革创新

    10月初,2020年国际区块链技术与应用大会在硅谷开幕,全球内外区块链技术项目团队.行业领导.专家等共聚一堂,围绕区块链技术与应用展开讨论交流.美国Masterboxan INC万事达资产管理有限公司 ...

  10. 为什么 Python 的 f-string 可以连接字符串与数字?

    本文出自"Python为什么"系列,归档在 Github 上:https://github.com/chinesehuazhou/python-whydo 毫无疑问,Python ...