19

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

 3 years ago
source link: http://developer.51cto.com/art/202009/626882.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【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套件具有四个主要部分:

63825fa42c27380d71d3bcbff294588d.png-wh_651x-s_1022154945.png

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之间的区别主要体现在如下方面:

架构上的差异

fd97aca31b013009bb328b447dc5c2e7.png

与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的架构

860ac36b6a6f608bbdb0c0795d624efd.png

如上图所示,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安装程序。

f61f67895b3495f070b2e7512b9c206c.png

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

3628ab261d77fe999ec94fef59bce16c.png

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

设置环境变量

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

1be3dbe90751ae1b585b7b406aad7a83.png

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

8b0bd22e588e67a219bd885629565d1a.png

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

075be72bf28a43d91b685527ff9037ec.png

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

a0999d97c3672dd97809929ac59399f5.png

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

cd7031cd8fde86bafedddc5f47c07c61.png-wh_600x-s_1354854107.png

安装Eclipse

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

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

78e5cb935a0ba09d6f715b5c2000bf6c.png

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

b02e2997d142889825ce399a339ae90f.png

下载Selenium WebDriver并设置

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

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

5e2e22ffb5bcecece32f8d6985eecbb4.png

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

6b7018d165657823025401fef15a7844.png

055758c0de15facbde44799d2e43274c.png

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

3e7e9ea4730298ab8d51a6c843980b8b.png-wh_600x-s_175152127.png

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

ea4907986ee9da96bf6e8215aebe1e51.png

步骤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:解压已下载的驱动,将其存放在到方便的位置。

c8a85f3883707fb153a37aa191bfe082.png-wh_600x-s_1492877951.png

为Selenium WebDriver配置Eclipse

步骤1:启动eclipse.exe。

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

bd8305528399a7213d38eb529703b95d.png

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

5d535abb2ff008c9068fb02521822645.png

b43cc7a88a422cff5fe0f9ac102668d4.png

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

f38d11deedb0f886d750e7a8caac14f4.png

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

442483806675bb2ed877a74183081d08.png

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

6a415aef5fdd52aecd90d7763c701f2c.png

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

eff17f401af02e77473ddf0517ffc778.png-wh_600x-s_929935073.png

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

8ba0d785062059a309a16f2ba92c7b2f.png

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

cc60f267d2884bf7e09553ed517d83a0.png

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

2b59c5aa2fc1d68839c05649fc936280.png

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

64e3032d8bdb8d6eac8952c224fd63aa.png-wh_600x-s_628618296.png

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

a23c872f7156e762b0599e79d04cf722.png

94f1d6e188fd7f98c9854ee933d7b0c4.png

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

86bea1ae924c4b48ebdae3dec828a801.png

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

3193298d180086e00744baabeb5ebe16.png

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

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

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

Java

package firstPackage; 
 
import org.openqa.selenium.WebDriver; 
 
import org.openqa.selenium.firefox.FirefoxDriver; 
 
public class MyFirstTestClass { 
 
  
 
    public static void main(String[] args) throws InterruptedException { 
 
  
 
System.setProperty("webdriver.gecko.driver","E:\\Softwares\\geckodriver.exe”);           
 
WebDriver driver = new FirefoxDriver(); 
 
            driver.get("https://www.google.com/"); 
 
            driver.manage().window().maximize(); 
 
            Thread.sleep(5000); 
 
            driver.quit(); 
 
    } 
 
} 

代码说明:

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

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

WebDriver driver = new FirefoxDriver() 

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

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

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

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

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

Thread.sleep(5000) 

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

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】

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK