第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. Python import本地模块

    无法识别本地模块 在pycharm中选择文件夹Mark Directory as -> Source root. 或者使用sys.path.append()添加文件夹路径 还是报错ImportE ...

  2. select函数详细用法解析

    1.表头文件 #include #include #include 2.函数原型 int select(int n,fd_set * readfds,fd_set * writefds,fd_set ...

  3. Netty(四)基于Netty 的简易版RPC

    3.1 RPC 概述 下面的这张图,大概很多小伙伴都见到过,这是 Dubbo 官网中的一张图描述了项目架构的演进过程 它描述了每一种架构需要的具体配置和组织形态.当网站流量很小时,只需一个应用,将所有 ...

  4. FZU2105 Digits Count(按位建线段树)题解

    题意: 给出区间与.或.异或\(x\)操作,还有询问区间和. 思路: 因为数比较小,我们给每一位建线段树,这样每次只要更新对应位的答案. 与\(0\)和或\(1\)相当于重置区间,异或\(1\)相当于 ...

  5. github & personal access token

    github & personal access token OAuth https://github.com/xgqfrms/webtrc-in-action/issues/1#issuec ...

  6. Flutter & App

    Flutter & App Android & iOS https://flutter.dev/docs/deployment/flavors https://flutter.dev/ ...

  7. 小程序 怎么发 beta 版本

    小程序 怎么发 beta 版本 微信 https://developers.weixin.qq.com/miniprogram/dev/devtools/mydev.html 小程序助手 支付宝 ht ...

  8. html fragment & html template & virtual DOM & web components

    html fragment & html template & virtual DOM https://developer.mozilla.org/en-US/docs/Web/API ...

  9. 创新全球算力生态价值,SPC算力生态强势来袭!

    当前,区块链技术已经到了一个新的时代,即3.0时代.在区块链3.0时代,区块链技术迎来了数字经济革命,各行各业也在积极寻找与区块链能够融合的切入点.而随着区块链的愈加成熟,区块链技术也愈加被更多的人应 ...

  10. 「NGK每日快讯」11.23日NGK公链第21期官方快讯!