手把手教您认识、搭建和使用Selenium WebDriver

译文
开发 架构
本文将和您讨论什么是Selenium WebDriver、它的架构组成、如何搭建自动化测试、以及一个简单示例。

【51CTO.com快译】Selenium是用于Web应用程序测试的最广泛的自动化框架之一。它可以通过自动执行浏览器测试,以简化我们花费在质量检查上的人工测试工作。Selenium WebDriver是Selenium套件中的一个关键组件。本文将和您讨论什么是Selenium WebDriver、它的架构组成、如何搭建自动化测试、以及一个简单示例。

什么是Selenium?

作为一个开源的自动化测试框架,Selenium可以在不同的浏览器和平台上执行应用测试。其主要特征包括:

  • Selenium支持包括:Java、Python、C#、JavaScript、Ruby、PHP和Perl在内的多种编程语言。
  • Selenium测试可以在诸如:Firefox、Chrome、Internet Explorer、Safari、以及Opera等多种浏览器上执行。
  • Selenium与平台无关,也就是说,如果您在Windows系统上编写的Selenium测试,完全可以被轻松地执行在Linux或macOS上。
  • Selenium具有广泛的社区,可以随时获得各种技术支持。
  • 并行测试是Selenium的主要功能之一。

Selenium的组成

如前所述,由于Selenium是一个框架,而不是单个软件,因此它是由不同组件所组成的套件。如下图所示,Selenium套件具有四个主要部分:

Selenium IDE

Selenium IDE(集成开发环境)是一种简单易学的框架。它可以作为Mozilla Firefox和Google Chrome的浏览器插件。您无需具备任何编程语言方面的经验,即可使用该IDE。通过它提供的记录和回放方法,您可以记录测试的步骤,并导入自己的首选编程语言,进而使用Selenium WebDriver来开展各项测试。因此,为了创建测试原型,您可以从Selenium官方网站-- https://www.selenium.dev/selenium-ide/,下载Selenium IDE。

Selenium RC

Selenium RC是一种服务器,它让用户能够用任何被支持的语言,来创建测试脚本。与Selenium IDE不同,它没有记录和回放功能,但支持并行和远程的方式被执行。作为Selenium1.0,它自身的诸多限制与缺陷,直接催生了Selenium WebDriver。

Selenium WebDriver

Selenium WebDriver克服了Selenium RC的局限性。与Selenium RC不同的是,Selenium WebDriver不需要依赖JavaScript,即可通过直接通信来控制浏览器。与IDE和RC相比,它具有更快的执行时间,有时也被称为Selenium 2.0。鉴于其强大的功能,Selenium WebDriver被广泛地使用在创建自动测试用例的场景中。

Selenium Grid

通过与Selenium RC的配合使用,Selenium Grid能够方便用户在不同的浏览器和计算机上执行并行测试。也就是说,用户可以在多个环境中同时运行并行测试,进而节省了大量的时间。Selenium Grid启用了集线器节点的概念,实现了每个节点都能够从位于中心处的集线器上接收命令。

Selenium WebDriver与Selenium RC不同之处

Selenium WebDriver和Selenium RC之间的区别主要体现在如下方面:

架构上的差异

与Selenium RC相比,Selenium WebDriver的架构更简单。WebDriver通过操作系统来控制浏览器。也就是说,在使用WebDriver时,您只需要将编程语言与浏览器的驱动程序绑定即可。而Selenium RC则要求在运行测试之前,先运行Selenium的远程控制服务器。

Selenium RC实际上充当的是Selenium代码和浏览器之间的中间层,它能够将Selenium Core(一种Javascript程序)注入浏览器,以便其内核通过RC服务器,接收由程序给出的指令。RC服务器在收到浏览器的响应后,会直接将结果显示给最终用户。

执行速度上的差异

在Selenium RC中,每条指令都需要遵循冗长的处理过程,而在Selenium WebDriver中,它们可以通过直接交互,来缩短整个生命周期。具体而言:

  • Selenium WebDriver直接与浏览器交互,并调用浏览器引擎来对其进行控制,因此执行的速度非常快。
  • Selenium RC需要首先将Selenium命令转换为控制Web浏览器的Selenium Core,因此执行的速度较慢。

互动上的差异

  • Selenium WebDriver通过直接与Web浏览器通信,来模仿真实际使用中的交互。例如:如果某些Web元素被隐藏或禁用,那么WebDriver将无法像普通用户那样找到它们。
  • Selenium RC使用与JavaScript代码相似的Selenium Core。该核心可以访问到被隐藏或禁用的元素。因此,即使我们使用Selenium RC在UI上禁用了某些文本框,用户仍然可以进行输入。

API上的差异

  • Selenium RC的API命令较为复杂。例如,click、mouseDown、以及mouseDownAt三者很容易被引起混淆;而type与typeKeys也是如此。此外,不同的浏览器对这些命令的解释也不尽相同。因此,在正确的位置选择正确的命令,对于用户来说成为了一项艰巨的任务。
  • Selenium WebDriver的API则非常简单易用。

对浏览器支持的差异

  • Selenium WebDriver支持headless的HTMLUnit浏览器。此处的headless表示没有UI显示,各种命令会通过不可见的浏览器来执行。
  • Selenium RC并不支持headless浏览器。

Selenium WebDriver的架构

如上图所示,Selenium WebDriver包含四个主要组件:

Selenium客户库/Selenium语言绑定

为了支持多种语言,Selenium开发人员已经构建了各种语言绑定。也就是说,如果您正在用Java来编写测试,那么就可以使用Java绑定。而且,这些客户端的库,完全可以从Selenium官方网站处进行下载。

JSON传输协议(Wire Protocol)

JSON是JavaScript Object Notation的缩写形式。它能够在客户端和服务器之间传输数据。由于JSON能够为对象和数组之类的数据结构提供支持,因此方便了数据的读取和写入。它往往充当REST API,实现HTTP服务器之间的信息传输。

浏览器驱动

为了与浏览器建立安全的连接,Selenium会用到驱动程序。每一种浏览器都会使用自己的驱动程序,来隐藏内部功能的逻辑。此外,每一种自动化语言也都有其对应的浏览器驱动。因此,各种脚本在被执行时,通常:

  • 每个Selenium命令都会生成一个相应的HTTP请求,该请求将会被发送到浏览器驱动程序处。
  • 该请求会通过HTTP服务器进行路由。
  • HTTP服务器在浏览器上,驱动指令的执行。
  • 浏览器将状态发送回给HTTP服务器,并将其转发给自动化脚本。

上文提到的浏览器驱动程序包括:ChromeDriver、GeckoDriver、以及IEDriver等。它们大多可以从GitHub存储库中被下载到。

浏览器

浏览器是我们执行测试的终点。Selenium能够支持诸如:Firefox、Chrome、Internet Explorer、以及Safari等主流浏览器。

Selenium WebDriver的下载、安装和设置

下面,我们来看看如何使用Windows操作系统,将Java作为编程语言,以Eclipse作为IDE,完成Selenium WebDriver的下载、安装和设置。

安装Java

步骤1:从Java官网--https://www.oracle.com/java/technologies/javase-jdk14-downloads.html查找并下载Windows 64位的JDK安装程序。

步骤2:在弹出的窗口中接受许可协议,并单击“下载”。

步骤3:完成后,请到下载文件夹中双击可执行文件,以安装Java。

设置环境变量

步骤1:打开电脑的设置,从“系统”对话框窗口中选择“高级系统设置”。

步骤2:在弹出的窗口中单击“环境变量”按钮。

步骤3:在“系统变量”处双击“路径”。

步骤4:根据系统对应的位置,添加Java安装目录的完整路径,并单击OK。

步骤5:验证是否已安装Java和正确地设置了变量。请打开“命令提示符”并键入:java -version。您将可以看到在系统中新安装的Java版本。

安装Eclipse

步骤1:从Eclipse官网--https://www.eclipse.org/downloads/packages/查找并下载适合Java开发人员专用的Eclipse IDE(最好是最新的稳定版)。

步骤2:下载完成后,请其解压缩到适当的位置。

步骤3:在生成的文件夹中双击eclipse.exe。

下载Selenium WebDriver并设置

步骤1:访问Selenium官网--https://www.selenium.dev/downloads/

步骤2:针对列表中的Selenium Client和WebDriver Language Bindings,请下载与自己语言首选项相对应的客户端库。本文以Java客户端为例。

步骤3:将下载的文件解压缩到某个目标文件夹中,以便后续使用。

 

步骤4:找到对应的目标文件夹。

步骤5:打开文件夹后,您将能够看到一些jar文件,一个libs文件夹(其中包含了更多的jar文件)和一个Changelog文件。

步骤6:为浏览器下载驱动程序。下面是三大主流浏览器驱动的下载链接:

  • GeckoDriver(Firefox)-- https://github.com/mozilla/geckodriver/releases
  • InternetExplorerDriver-- https://selenium-release.storage.googleapis.com/index.html
  • ChromeDriver-- https://sites.google.com/a/chromium.org/chromedriver/

您也可以通过参考Selenium网站上的“浏览器”部分,以下载更多浏览器驱动。

步骤7:解压已下载的驱动,将其存放在到方便的位置。

为Selenium WebDriver配置Eclipse

步骤1:启动eclipse.exe。

步骤2:手动选择工作区,或保持默认位置,然后单击“确定”。

步骤3:根据向导,依次点击“文件”->“新建”->“Java项目”,以创建一个新的项目。

 

步骤4:点击“下一步”,为项目命名,并单击完成。

步骤5:在新建的项目上右键,选择“新建”->“包”。

步骤6:在“新建Java包”对话框中输入包的名称,然后单击“完成”。

步骤7:右击新建包的名称,依次选择“新建”->“类”。

步骤8:在“新建Java类”对话框中,输入类的名称,在方法根(method stub)处,勾选“public static void main(String [] args)”,然后单击“完成”。

您的资源管理器看上去会与下图类似:

步骤9:在当前项目上右击,依次选择“构建路径”->“配置构建路径”。

第10步:单击“添加外部JAR”,然后定位到已下载保存的JAR文件。

步骤11:依次选择Selenium Client文件夹中的两个jar,以及libs文件夹里的jar文件。

步骤12:添加完毕后,您将在Libraries下看到所有的jar文件:

步骤13:依次点击“应用”->“OK”。此时,您将在“包管理器”下看到所有的“引用库”。

至此,我们已成功地在Eclipse Project中配置了Selenium WebDriver。

使用Selenium WebDriver执行第一个测试脚本

我们将编写一个简单的测试程序,该程序将启动Firefox浏览器,并打开“www.google.com”,在将浏览器最大化窗口后,最后退出会话。我们在代码中将写入前文在配置Selenium时创建的测试类。具体代码段如下:

Java 

  1. package firstPackage; 
  2.  
  3. import org.openqa.selenium.WebDriver; 
  4.  
  5. import org.openqa.selenium.firefox.FirefoxDriver; 
  6.  
  7. public class MyFirstTestClass { 
  8.  
  9.   
  10.  
  11.     public static void main(String[] args) throws InterruptedException { 
  12.  
  13.   
  14.  
  15. System.setProperty("webdriver.gecko.driver","E:\\Softwares\\geckodriver.exe”);           
  16.  
  17. WebDriver driver = new FirefoxDriver(); 
  18.  
  19.             driver.get("https://www.google.com/"); 
  20.  
  21.             driver.manage().window().maximize(); 
  22.  
  23.             Thread.sleep(5000); 
  24.  
  25.             driver.quit(); 
  26.  
  27.     } 
  28.  

 代码说明:

  1. System.setProperty(“webdriver.gecko.driver”,”E:\\Softwares\\geckodriver.exe”) 

这行代码用于设置浏览器的属性,即:将系统的属性设置为给定值。WebDriver代码将引用存储在第二个参数中所在路径里的驱动,并实例化Firefox驱动。注意,您需要提供的是存储驱动程序的系统路径。

  1. WebDriver driver = new FirefoxDriver() 

我们通过引用WebDriver接口,来创建Firefox类的对象(Object)。也就是说,我们可以在Firefox实例中实现WebDriver的方法。

  1. driver.get(“https://www.google.com/”) 

WebDriver的get()方法可以被用于打开URL,并等待页面的完全加载。

  1. driver.manage().window().maximize() 

maximum()方法可实现浏览器窗口的最大化。

  1. Thread.sleep(5000) 

为了使实例在网络连接速度过慢的情况下不会超时,我们可以通过休眠,使线程的执行暂停指定的毫秒数(括号中的数值)。 

  1. driver.quit() 

quit()方法用于终止WebDriver会话,并关闭由WebDriver所启动的浏览器窗口。

在执行了上述代码后,您将会在Eclipse Console窗口中看到如下执行日志。而在执行测试时,您也会观察到浏览器窗口随着Google的启动,并在随后自行关闭。

至此,您已经成功地执行了第一个Selenium WebDriver测试脚本。当然,您也可以试着使用其他浏览器驱动来编写不同的测试脚本。

Selenium WebDriver的局限性

如前所述,Selenium WebDriver在取代RC方面有着诸多优势。不过客观地说,它也存在着如下局限性:

i. Selenium WebDriver不支持基于Windows的应用程序自动化。

ii. Selenium WebDriver无法自动执行图像测试、提供验证码或OTP功能。

iii. Selenium WebDriver没有任何内置的报告。

iv. 由于它是开源的,因此您必须依靠社区论坛,来解决各种技术问题。

v. 在使用Selenium WebDriver自动化之前,您需要至少具有一门编程语言的基础知识。

vi. Selenium中没有用于“测试管理”的测试集成工具。

vii. Selenium WebDriver不支持并行测试。这对于大型且复杂的测试套件而言,是一种严重的不足。

值得一提的是,如果你的确希望用Selenium来执行并行测试的话,请试用Selenium的另一个组件--Selenium Grid。它通过从集线器服务器,向远程Web浏览器实例发送命令,来实现并行测试。因此,在实际进行自动化测试时,我们可以用它来实现在多种浏览器、操作系统、以及设备上测试自动化脚本。

原标题:Most Practical Selenium WebDriver Tutorial With Examples ,作者:Ritesh Shetty

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-11-10 09:00:00

JavaMule ESB开发

2009-10-21 10:47:03

Siliverligh

2010-07-07 10:24:46

Python多线程

2010-08-18 09:15:45

路由器网络诊断

2011-02-15 09:43:33

虚拟机

2010-08-26 09:24:59

路由器网络诊断

2020-02-21 10:45:06

运维架构技术

2010-09-02 10:50:17

时间同步服务器

2010-09-14 09:24:27

家庭无线网络

2010-04-02 16:51:09

虚拟机安装linux

2009-11-06 10:44:31

Visual Stud

2022-09-14 17:12:15

flowable源码DEMO

2009-12-02 10:16:55

备份Cisco路由器配

2010-03-10 11:16:31

服务器DIY

2022-03-14 14:47:21

HarmonyOS操作系统鸿蒙

2021-12-02 11:39:28

Git服务器Linux

2021-07-14 09:00:00

JavaFX开发应用

2023-03-27 00:06:12

2022-12-07 08:42:35

2011-03-25 12:45:49

Oracle SOA
点赞
收藏

51CTO技术栈公众号