【.com快译】Selenium是最广泛的Web应用程序测试自动化框架之一。它可以通过自动化浏览器测试来简化我们在QA上花费的手动测试工作。SeleniumWebDriver是Selenium套件中的一个关键组件。本文将和大家一起探讨什么是SeleniumWebDriver,它的架构,如何构建自动化测试,以及一个简单的例子。什么是硒?Selenium作为一个开源的自动化测试框架,可以在不同的浏览器和平台上进行应用程序测试。它的主要特性包括:Selenium支持多种编程语言,包括:Java、Python、C#、JavaScript、Ruby、PHP和Perl。Selenium测试可以在各种浏览器上执行,例如:Firefox、Chrome、InternetExplorer、Safari和Opera。Selenium是平台无关的,这意味着如果你在Windows系统上编写Selenium测试,它可以很容易地在Linux或macOS上执行。Selenium拥有广泛的社区,可以随时获得各种技术支持。并行测试是Selenium的主要特性之一。Selenium的组成正如前面提到的,由于Selenium是一个框架而不是一个单独的软件,它是一套不同的组件。如下图所示,Selenium套件有四个主要部分:SeleniumIDESeleniumIDE(集成开发环境)是一个易于学习的框架。它可作为MozillaFirefox和GoogleChrome的浏览器插件使用。您无需具备任何编程语言的经验即可使用IDE。通过它提供的录制和回放方式,您可以录制测试的步骤,导入您喜欢的编程语言,使用SeleniumWebDriver进行测试。因此,要创建测试原型,您可以从Selenium官方网站下载SeleniumIDE--https://www.selenium.dev/selenium-ide/。SeleniumRCSeleniumRC是一个服务器,它使用户能够用任何支持的语言创建测试脚本。与SeleniumIDE不同,它没有记录和回放功能,但支持并行和远程执行。作为Selenium1.0,它的诸多限制和缺陷直接催生了SeleniumWebDriver。SeleniumWebDriverSeleniumWebDriver克服了SeleniumRC的局限性。与SeleniumRC不同,SeleniumWebDriver不需要JavaScript通过直接通信来控制浏览器。与IDE和RC相比,它的执行时间更快,有时也称为Selenium2.0。鉴于其强大的功能,SeleniumWebDriver被广泛应用于创建自动测试用例的场景。SeleniumGrid与SeleniumRC配合使用,SeleniumGrid可以方便用户在不同的浏览器和电脑上进行并行测试。即用户可以同时在多个环境中运行并行测试,从而节省大量时间。SeleniumGrid支持集线器节点的概念,使每个节点都能从位于中心的集线器接收命令。SeleniumWebDriver和SeleniumRC的区别SeleniumWebDriver和SeleniumRC的区别主要体现在以下几个方面:架构上的区别与SeleniumRC相比,SeleniumWebDriver的架构更简单。WebDriver通过操作系统控制浏览器。也就是说,在使用WebDriver时,只需要将编程语言与浏览器的驱动绑定即可。另一方面,SeleniumRC要求在运行测试之前运行Selenium的远程控制服务器。SeleniumRC实际上充当了Selenium代码和浏览器之间的中间层。它可以在浏览器中注入SeleniumCore(一个Javascript程序),使其内核通过RC服务器接收程序给出的指令。RC服务器收到浏览器的响应后,直接将结果展示给终端用户。执行速度的差异在SeleniumRC中,每条指令都需要经历一个漫长的过程,而在SeleniumWebDriver中,它们可以通过直接交互来缩短整个生命周期。具体来说:SeleniumWebDriver直接与浏览器交互,调用浏览器引擎对其进行控制,因此执行速度非常快。SeleniumRC需要先将Selenium命令转换为控制Web浏览器的SeleniumCore,因此执行速度较慢。交互差异SeleniumWebDriver直接与Web浏览器通信以模拟真实世界的交互。例如:如果某些网页元素被隐藏或禁用,那么WebDriver将无法像普通用户一样找到它们。SeleniumRC使用类似于JavaScript代码的SeleniumCore。该核心提供对隐藏或禁用元素的访问。因此,即使我们使用SeleniumRC在UI上禁用了一些文本框,用户仍然可以进行输入。API的差异SeleniumRC的API命令更加复杂。例如click、mouseDown、mouseDownAt很容易混淆;type和typeKeys也是如此。此外,不同的浏览器对这些命令的解释也不同。因此,在正确的位置选择正确的命令成为用户的一项艰巨任务。SeleniumWebDriver的API非常简单易用。浏览器支持的差异SeleniumWebDriver支持无头HTMLUnit浏览器。这里的headless是指没有UI展示,各种命令会通过一个看不见的浏览器来执行。SeleniumRC不支持无头浏览器。SeleniumWebDriver的架构如上图所示,SeleniumWebDriver由四个主要组件组成:SeleniumClientLibrary/SeleniumLanguageBindings为了支持多种语言,Selenium开发人员构建了各种语言绑定。也就是说,如果您正在用Java编写测试,则可以使用Java绑定。此外,这些客户端库可以从Selenium官方网站下载。JSON传输协议(有线协议)JSON是JavaScriptObjectNotation的缩写。它能够在客户端和服务器之间传输数据。由于JSON可以提供对象、数组等数据结构的支持,方便了数据的读写。它倾向于充当RESTAPI,用于在HTTP服务器之间传输信息。浏览器驱动程序为了与浏览器建立安全连接,Selenium使用驱动程序。每个浏览器都使用自己的驱动程序来隐藏其内部功能的逻辑。此外,每种自动化语言也有其对应的浏览器驱动程序。因此,在执行各种脚本时,通常:每个Selenium命令都会产生一个对应的HTTP请求,发送给浏览器驱动程序。请求通过HTTP服务器进行路由。HTTP服务器位于浏览器上并驱动指令的执行。浏览器将状态发送回HTTP服务器,HTTP服务器将其转发给自动化脚本。上面提到的浏览器驱动包括:ChromeDriver、GeckoDriver、IEDriver等,大部分都可以从GitHub仓库下载。浏览器浏览器是我们执行测试的端点。Selenium可以支持主流浏览器,例如:Firefox、Chrome、InternetExplorer和Safari。SeleniumWebDriver的下载、安装和设置下面我们就来看看如何使用Windows操作系统,以Java为编程语言,以Eclipse为IDE来完成SeleniumWebDriver的下载、安装和设置。安装Java第1步:从Java官网找到并下载Windows64位JDK安装程序——https://www.oracle.com/java/technologies/javase-jdk14-downloads.html。第二步:在弹出的窗口中接受许可协议,点击“下载”。第3步:完成后,转到下载文件夹并双击可执行文件以安装Java。设置环境变量第一步:打开电脑的设置,在“系统”对话框窗口中选择“高级系统设置”。第二步:在弹出的窗口中点击“环境变量”按钮。第三步:双击“系统变量”中的“路径”。第四步:根据系统对应的位置,添加Java安装目录的完整路径,点击确定。第5步:验证是否安装了Java并且变量设置正确。请打开命令提示符并键入:java-version。您将能够在您的系统上看到新安装的Java版本。安装Eclipse第一步:从Eclipse官网-https://www.eclipse.org/downloads/packages/找到并下载适合Java开发者的EclipseIDE(最好是最新的稳定版)。第二步:下载完成后,解压到合适的位置。第三步:双击生成文件夹中的eclipse.exe。下载SeleniumWebDriver并设置第1步:访问Selenium官网--https://www.selenium.dev/downloads/。第2步:对于列表中的SeleniumClient和WebDriverLanguageBindings,请下载与您的语言偏好相对应的客户端库。本文以Java客户端为例。第三步:将下载的文件解压到目标文件夹以备后用。第四步:找到对应的目标文件夹。第五步:打开文件夹后,你会看到一些jar文件,一个libs文件夹(里面有更多的jar文件)和一个Changelog文件。第六步:下载浏览器驱动。以下是三大浏览器驱动的下载链接:GeckoDriver(Firefox)--https://github.com/mozilla/geckodriver/releasesInternetExplorerDriver--https://selenium-release.storage.googleapis.com/index.htmlChromeDriver--https://sites.google.com/a/chromium.org/chromedriver/也可以参考Selenium网站的“浏览器”部分下载更多浏览器驱动。第7步:解压缩下载的驱动程序并将其存储在方便的位置。为SeleniumWebDriver配置Eclipse第1步:启动eclipse.exe。第二步:手动选择工作区,或保持默认位置,点击确定。第三步:根据向导,点击“文件”->“新建”->“Java项目”,创建一个新项目。第4步:单击Next,为项目命名,然后单击Finish。第五步:右键点击新建的项目,选择“New”->“Package”。第6步:在NewJavaPackage对话框中输入包的名称,然后单击Finish。第七步:右击新建的包名,依次选择“新建”->“类”。第八步:在“NewJavaClass”对话框中,输入类的名称,在方法存根处,勾选“publicstaticvoidmain(String[]args)”,然后点击“Finish”。你的资源管理器看起来会很相似如下图:Step9:右击当前项目,选择“BuildPath”->“ConfigureBuildPath”。Step10:点击“AddExternalJAR”,导航到下载并保存的JAR文件。Step11:依次选择SeleniumClient文件夹下的两个jar和libs文件夹下的jar文件Step12:添加完成后在Libraries下会看到所有的jar文件:Step13:点击“Apply”->“OK”。此时,您将在包管理器下看到所有引用的库。到目前为止,我们已经在Eclipse项目中成功配置了SeleniumWebDriver。使用SeleniumWebDriver执行第一个测试脚本我们将编写一个简单的测试程序来启动Firefox浏览器,打开“www.google.com”,最大化浏览器窗口,最后退出会话。在代码中,我们将write之前配置Selenium时创建的测试类。具体代码段如下:"E:\\Softwares\\geckodriver.exe");WebDriverdriver=newFirefoxDriver();driver.get("https://www.google.com/");driver.manage().window().maximize();Thread.sleep(5000);driver.quit();}}代码说明:System.setProperty("webdriver.gecko.driver","E:\\Softwares\\geckodriver.exe")这行代码用于设置controller的浏览器属性,即:将系统的属性设置为给定的值。WebDriver代码会引用第二个参数中路径下存储的驱动,并实例化Firefox驱动。注意需要的是提供的是存放驱动的系统路径WebDriverdriver=newFirefoxDriver()我们通过引用创建一个Firefox类的对象(Object)网络驱动程序接口。即我们可以在Firefox实例中实现WebDriver的方法。driver.get("https://www.google.com/")WebDriver的get()方法可用于打开URL并等待页面完全加载。driver.manage().window().maximize()maximize()方法可以最大化浏览器窗口。Thread.sleep(5000)为了防止实例在网络连接速度过慢时超时,我们可以sleep来暂停线程执行指定的毫秒数(括号内的值)。driver.quit()quit()方法用于终止WebDriver会话并关闭由WebDriver启动的浏览器窗口。执行完上面的代码,你会在EclipseConsole窗口看到如下执行日志。在运行测试时,您还会观察到浏览器窗口以Google启动,然后自行关闭。此时,您已经成功执行了您的第一个SeleniumWebDriver测试脚本。当然,你也可以尝试使用其他浏览器驱动编写不同的测试脚本。SeleniumWebDriver的局限正如前面提到的,SeleniumWebDriver在替代RC方面有很多优势。但客观地说,它也有以下局限性:i.SeleniumWebDriver不支持基于Windows的应用程序自动化。二.SeleniumWebDriver无法自动执行图像测试、验证码或OTP功能。三.SeleniumWebDriver没有任何内置报告。四.由于它是开源的,您必须依靠社区论坛来解决各种技术问题。v.在使用SeleniumWebDriver实现自动化之前,您需要至少具备一种编程语言的基本知识。六.Selenium中没有用于“测试管理”的测试集成工具。七.SeleniumWebDriver不支持并行测试。对于大型和复杂的测试套件来说,这是一个严重的缺陷。值得一提的是,如果你真的想使用Selenium进行并行测试,请尝试Selenium的另一个组件——SeleniumGrid。它通过将命令从中心服务器发送到远程Web浏览器实例来启用并行测试。因此,在实际进行自动化测试时,我们可以使用它在多种浏览器、操作系统和设备上测试自动化脚本。原标题:MostPracticalSeleniumWebDriverTutorialWithExamples,作者:RiteshShetty
