Selenium - 快速指南
Selenium - 概述
介绍
Selenium 是一个开源的、便携式的自动化软件测试工具,用于测试 Web 应用程序。它具有跨不同浏览器和操作系统运行的能力。Selenium 不仅仅是一个工具,而是一组工具,可以帮助测试人员更有效地自动化基于 Web 的应用程序。
现在让我们了解 Selenium 套件中可用的每一种工具及其用法。
先生。 | 工具及说明 |
---|---|
1 | Selenium集成开发环境 Selenium集成开发环境(IDE) 是一个 Firefox 插件,可让测试人员在遵循需要测试的工作流程时记录他们的操作。 |
2 | SeleniumRC Selenium远程控制(RC) 是旗舰测试框架,它不仅仅允许简单的浏览器操作和线性执行。它充分利用 Java、C#、PHP、Python、Ruby 和 PERL 等编程语言的全部功能来创建更复杂的测试。 |
3 | Selenium网络驱动程序 Selenium WebDriver 是 Selenium RC 的继承者,它直接向浏览器发送命令并检索结果。 |
4 | Selenium网格 Selenium Grid 是一种用于在不同机器和不同浏览器上同时运行并行测试的工具,从而最大限度地缩短执行时间。 |
Selenium的优点
QTP 和 Selenium 是软件自动化测试市场上最常用的工具。因此,比较 Selenium 与 QTP 的优点是有意义的。
Selenium | QTP |
---|---|
Selenium 是一个开源工具。 | QTP 是一种商业工具,每个许可证都涉及成本。 |
可以针对公开 DOM 的各种技术进行扩展。 | 附加组件有限,并且每一项技术都需要附加组件。 |
具有跨不同浏览器执行脚本的能力。 | 可以在特定版本的 Firefox、IE 和 Chrome 中运行测试。 |
可以在各种操作系统上执行脚本。 | 仅适用于 Windows。 |
支持移动设备。 | 借助第三方工具支持移动设备。 |
在浏览器中执行测试,因此在脚本执行过程中不需要焦点。 | 在脚本执行期间需要焦点,因为该工具作用于浏览器(模仿用户操作)。 |
可以使用 Selenium Grid 并行执行测试。 | QTP 无法并行执行测试,但是将 QTP 与 QC 集成允许测试人员并行执行。QC也是一种商业工具。 |
Selenium的缺点
现在让我们讨论 Selenium 相对于 QTP 的缺陷。
Selenium | QTP |
---|---|
仅支持基于 Web 的应用程序。 | 可以测试 Web 和桌面应用程序。 |
没有对象存储库/恢复场景等功能 | QTP 具有内置的对象存储库和恢复方案。 |
没有IDE,所以脚本开发不会像QTP那么快。 | 更直观的IDE;可以更快地实现自动化。 |
无法访问浏览器内的控件。 | 可以访问浏览器内的控件,例如收藏夹栏、后退和前进按钮。 |
没有默认的测试报告生成。 | 工具内默认生成测试结果。 |
对于参数化,用户必须依赖编程语言。 | 参数化是内置的并且易于实现。 |
Selenium-IDE
Selenium-IDE(集成开发环境)是一个易于使用的 Firefox 插件,用于开发 Selenium 测试用例。它提供了一个图形用户界面,用于使用 Firefox 记录用户操作,用于学习和使用 Selenium,但它只能与 Firefox 浏览器一起使用,因为不支持其他浏览器。
然而,录制的脚本可以转换为Selenium支持的各种编程语言,并且脚本也可以在其他浏览器上执行。
下表列出了我们将在本章中介绍的部分。
先生。 | 标题描述 |
---|---|
1 | 下载 Selenium IDE
本节介绍如何下载和配置 Selenium IDE。 |
2 | Selenium IDE 功能
本节介绍 Selenium IDE 中可用的功能。 |
3 | 创建 Selenium IDE 测试
本节介绍如何使用录制功能创建 IDE 测试。 |
4 | Selenium IDE 脚本调试
本节涉及调试 Selenium IDE 脚本。 |
5 | 插入验证点
本节介绍如何在 Selenium IDE 中插入验证点。 |
6 | Selenium模式匹配
本节介绍如何使用 IDE 处理正则表达式。 |
7 | Selenium 用户扩展
允许用户自定义或添加新功能的 Java 脚本。 |
8 | 不同浏览器执行
本节介绍如何在不同浏览器上执行 Selenium IDE 脚本。 |
Selenium - 环境设置
为了开发 Selenium RC 或 WebDriver 脚本,用户必须确保已完成初始配置。设置环境涉及以下步骤。
- 下载并安装 Java
- 下载并配置 Eclipse
- 配置 FireBug 和 FirePath
- 配置 Selenium RC
- 配置 Selenium WebDriver
下载并安装 Java
我们需要安装 JDK(Java 开发工具包)才能使用 Selenium WebDriver/Selenium。让我们看看如何下载并安装 Java。
步骤 1 - 导航至 UR。
https://www.oracle.com/technetwork/java/javase/downloads/index.html
步骤 2 - 转到“下载”部分并选择“JDK 下载”。
步骤 3 - 选择“接受许可协议”单选按钮。
步骤 4 - 选择适当的安装。在本例中,它是“Windows 7-64”位。单击相应的链接并将 .exe 文件保存到您的磁盘。
步骤 5 - 运行下载的 exe 文件以启动安装程序向导。单击“下一步”继续。
步骤 6 - 选择功能并单击“下一步”。
步骤 7 - 安装程序被提取,其进度显示在向导中。
步骤 8 - 用户可以选择安装位置并单击“下一步”。
步骤 9 - 安装程序安装 JDK 并复制新文件。
步骤 10 - 安装程序安装成功并向用户显示相同的内容。
步骤 11 - 要验证安装是否成功,请转到命令提示符并键入“java”作为命令。该命令的输出如下所示。如果Java安装不成功或尚未安装,则会抛出“未知命令”错误。
下载并配置 Eclipse
步骤 1 - 导航到 URL: https: //www.eclipse.org/downloads/并根据您的操作系统架构下载适当的文件。
步骤 2 - 单击“下载”按钮。
步骤 3 - 下载将为压缩格式。解压缩内容。
步骤 4 - 找到 Eclipse.exe 并双击该文件。
步骤 5 - 要配置工作区,请选择必须进行开发的位置。
步骤 6 - Eclipse 窗口打开,如下所示。
配置 FireBug 和 FirePath
要使用 Selenium RC 或 WebDriver,我们需要根据 XPath 或 ID 或名称等来定位元素。为了定位元素,我们需要工具/插件。
步骤 1 - 导航到 URL: https: //addons.mozilla.org/en-US/firefox/addon/firebug/并下载插件。
步骤 2 - 向用户显示附加安装程序,并在单击“安装”按钮后安装。
步骤 3 - 安装后,我们可以通过导航到“Web Developer”>>“Firebug”来启动插件。
步骤 4 - FirePath,一个在 Firebug 中工作的插件,可以帮助用户获取元素的“XPath”。通过导航到“ https://addons.mozilla.org/en-US/firefox/addon/firepath/ ”来安装 FirePath
步骤 5 - 向用户显示附加安装程序,并在单击“安装”按钮后安装。
步骤 6 - 现在通过导航到“Tools”>>“Webdeveloper”>>“Firebug”来启动“Firebug”。
例子
现在让我们通过示例来了解如何使用 FireBug 和 FirePath。为了进行演示,我们将使用 www.google.com 并捕获“google.com”文本框的属性。
步骤 1 - 首先单击以下屏幕截图中突出显示的箭头图标,并将其拖动到我们要捕获其属性的对象。对象的 HTML/DOM 将显示如下。我们能够捕获可以与之交互的输入文本框的“ID”。
步骤 2 - 要获取对象的 XPath,请转到“firepath”选项卡并执行以下步骤。
- 单击间谍图标。
- 选择我们想要捕获 XPath 的控件。
- 将生成所选控件的 XPath。
配置 Selenium RC
现在让我们看看如何配置 Selenium 远程控制。我们将在后面的章节中了解如何使用 Selenium RC 开发脚本,但现在我们仅了解其中的配置部分。
步骤 1 - 导航到 Selenium 下载部分http://www.seleniumhq.org/download/并通过单击版本号下载 Selenium Server,如下所示。
步骤 2 - 下载后,我们需要启动 Selenium 服务器。为此,请打开命令提示符并导航到保存下载的 JAR 文件的文件夹,如下所示。
步骤 3 - 要启动服务器,请使用命令“java -jar <<下载的 jar 名称 >>”,如果 java JDK 安装正确,您将收到如下所示的成功消息。现在我们可以开始编写 Selenium RC 脚本了。
配置 Selenium WebDriver
现在让我们看看如何配置 Selenium WebDriver。我们将在后面的章节中了解如何使用 Selenium WebDriver 开发脚本,但现在我们仅了解其配置部分。
步骤 1 - 导航到 selenium 下载部分http://www.seleniumhq.org/download/并通过单击版本号下载 Selenium WebDriver,如下所示。
步骤 2 - 下载的文件为压缩格式,必须解压缩内容才能将其映射到项目文件夹。
步骤 3 - 解压缩的内容将显示如下。如何将其映射到项目文件夹以及如何开始编写脚本将在 webDriver 章节中讨论。
Selenium - 远程控制
什么是Selenium RC?
Selenium Remote Control (RC) 是 Selenium WebDriver(Selenium 2.0)出现之前持续了很长时间的主要 Selenium 项目。现在Selenium RC已经很少使用了,因为WebDriver提供了更强大的功能,但是用户仍然可以继续使用RC来开发脚本。
它允许我们借助 Java、C#、Perl、Python 和 PHP 等编程语言的全部功能来编写自动化 Web 应用程序 UI 测试,以创建更复杂的测试,例如读写文件、查询数据库以及通过电子邮件发送测试结果。
Selenium RC 架构
Selenium RC 的工作方式是客户端库可以与 Selenium RC 服务器进行通信,传递每个 Selenium 命令来执行。然后服务器使用 Selenium-Core JavaScript 命令将 Selenium 命令传递到浏览器。
浏览器使用其 JavaScript 解释器执行 Selenium 命令。
Selenium RC 分为两部分。
Selenium 服务器启动并终止浏览器。除此之外,它还解释并执行 Selenese 命令。它还通过拦截和验证浏览器与被测应用程序之间传递的 HTTP 消息来充当 HTTP 代理。
客户端库提供每种编程语言(Java、C#、Perl、Python 和 PHP)与 Selenium-RC 服务器之间的接口。
RC 脚本
现在让我们使用 Selenium Remote Control 编写一个示例脚本。让我们使用http://www.calculator.net/来了解 Selenium RC。我们将使用“数学计算器”模块下的“百分比计算器”执行百分比计算。
步骤 1 - 启动 Selenium Remote Control(在命令提示符的帮助下)。
步骤 2 - 启动 Selenium RC 后,打开 Eclipse 并创建一个“新项目”,如下所示。
步骤 3 - 输入项目名称并单击“下一步”按钮。
步骤 4 - 验证源、项目、库和输出文件夹,然后单击“完成”。
步骤 5 - 右键单击“项目”容器并选择“配置构建路径”。
步骤 6 - 打开“selrcdemo”属性。导航到“库”选项卡并选择“添加外部 JAR”。选择我们下载的 Selenium RC jar 文件,它将如下所示。
步骤 7 - 引用的库如下所示。
步骤 8 - 通过右键单击“src”文件夹并选择“新建”>>“类”来创建新的类文件。
步骤 9 - 输入类文件的名称并启用“public static void main”,如下所示。
步骤 10 - 在文件夹结构下创建创建的类,如下所示。
步骤 11 - 现在是编码的时候了。以下代码中嵌入了注释,以便读者理解所提出的内容。
package selrcdemo; import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.Selenium; public class rcdemo { public static void main(String[] args) throws InterruptedException { // Instatiate the RC Server Selenium selenium = new DefaultSelenium("localhost", 4444 , "firefox", "http://www.calculator.net"); selenium.start(); // Start selenium.open("/"); // Open the URL selenium.windowMaximize(); // Click on Link Math Calculator selenium.click("xpath = .//*[@id = 'menu']/div[3]/a"); Thread.sleep(2500); // Wait for page load // Click on Link Percent Calculator selenium.click("xpath = .//*[@id = 'menu']/div[4]/div[3]/a"); Thread.sleep(4000); // Wait for page load // Focus on text Box selenium.focus("name = cpar1"); // enter a value in Text box 1 selenium.type("css=input[name = \"cpar1\"]", "10"); // enter a value in Text box 2 selenium.focus("name = cpar2"); selenium.type("css = input[name = \"cpar2\"]", "50"); // Click Calculate button selenium.click("xpath = .//*[@id = 'content']/table/tbody/tr/td[2]/input"); // verify if the result is 5 String result = selenium.getText(".//*[@id = 'content']/p[2]"); if (result == "5") { System.out.println("Pass"); } else { System.out.println("Fail"); } } }
步骤 12 - 现在,让我们通过单击“运行”按钮来执行脚本。
步骤 13 - 脚本将开始执行,用户将能够在“命令历史记录”选项卡下查看命令历史记录。
步骤 14 - 应用程序的最终状态如下所示。计算百分比并将结果显示在屏幕上,如下所示。
步骤 15 - 测试的输出打印在 Eclipse 控制台上,如下所示,因为我们已将输出打印到控制台。输出实时写入 HTML 文件或简单的文本文件中。
Selenium - Selenese 命令
命令是指 Selenium 必须执行的操作,selenium 中的命令分为三种类型。单击其中每一项即可了解有关命令的更多信息。
定位器
元素定位器帮助 Selenium 识别命令引用的 HTML 元素。所有这些定位器都可以借助 Mozilla 的 FirePath 和 FireBug 插件来识别。详细信息请参阅环境设置章节。
identifier = id选择指定“id”属性的元素,如果没有匹配,则选择第一个@name属性为id的元素。
id = id选择具有指定“id”属性的元素。
name = name选择第一个具有指定“name”属性的元素
dom = javascriptExpression Selenium 通过评估指定的字符串来查找元素,该字符串允许我们使用 JavaScript 遍历 HTML 文档对象模型。用户无法返回值,但可以将其计算为块中的表达式。
xpath = xpathExpression使用 XPath 表达式定位元素。
link = textPattern选择包含与指定模式匹配的文本的链接元素(在锚标记内)。
css = cssSelectorSyntax使用 css 选择器选择元素。
Selenium - Webdriver
WebDriver 是一个用于自动测试 Web 应用程序的工具。它通常被称为 Selenium 2.0。WebDriver 使用不同的底层框架,而 Selenium RC 使用嵌入在浏览器中的 JavaScript Selenium-Core,这有一些限制。WebDriver 直接与浏览器交互,无需任何中介,不像 Selenium RC 依赖于服务器。它用于以下上下文 -
多浏览器测试,包括 Selenium RC (Selenium 1.0) 未很好支持的浏览器改进功能。
处理多个框架、多个浏览器窗口、弹出窗口和警报。
复杂的页面导航。
高级用户导航,例如拖放。
基于 AJAX 的 UI 元素。
建筑学
WebDriver 最好用一个简单的架构图来解释,如下所示。
Selenium RC 与 WebDriver
SeleniumRC | Selenium网络驱动程序 |
---|---|
Selenium RC 的架构很复杂,因为在开始测试之前需要启动并运行服务器。 | WebDriver 的架构比 Selenium RC 更简单,因为它从操作系统级别控制浏览器。 |
Selenium 服务器充当浏览器和 Selenese 命令之间的中间人。 | WebDriver直接与浏览器交互,并使用浏览器的引擎来控制它。 |
Selenium RC 脚本执行速度较慢,因为它使用 Javascript 与 RC 交互。 | WebDriver 速度更快,因为它直接与浏览器交互。 |
Selenium RC 不支持无头执行,因为它需要真正的浏览器才能使用。 | WebDriver可以支持无头执行。 |
这是一个简单而小的 API。 | 与 RC 相比,API 复杂且有点大。 |
较少面向对象的 API。 | 纯粹面向对象的API。 |
无法测试移动应用程序。 | 可以测试iPhone/Android应用程序。 |
使用 WebDriver 编写脚本
让我们了解如何使用 WebDriver。为了进行演示,我们将使用https://www.calculator.net/。我们将执行位于“数学计算器”下的“百分比计算器”。我们已经下载了所需的 WebDriver JAR。详细信息请参阅“环境设置”一章。
步骤 1 - 从提取的 Eclipse 文件夹中启动“Eclipse”。
步骤 2 - 单击“浏览”按钮选择工作区。
步骤 3 - 现在从“文件”菜单创建一个“新项目”。
步骤 4 - 输入项目名称并单击“下一步”。
步骤 5 - 转到“库”选项卡并选择我们已下载的所有 JAR。添加对 Selenium WebDriver Library 文件夹的所有 JAR 以及 selenium-java-2.42.2.jar 和 selenium-java-2.42.2-srcs.jar 的引用。
步骤 6 - 创建包,如下所示。
步骤 7 - 现在右键单击包并选择“新建”>>“类”以创建“类”。
步骤 8 - 现在命名该类并使其成为主函数。
步骤 9 - 课程大纲如下所示。
步骤 10 - 现在是时候编码了。以下脚本更容易理解,因为它嵌入了注释来清楚地解释步骤。请查看“定位器”一章以了解如何捕获对象属性。
import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; public class webdriverdemo { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); //Puts an Implicit wait, Will wait for 10 seconds before throwing exception driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //Launch website driver.navigate().to("http://www.calculator.net/"); //Maximize the browser driver.manage().window().maximize(); // Click on Math Calculators driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click(); // Click on Percent Calculators driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click(); // Enter value 10 in the first number of the percent Calculator driver.findElement(By.id("cpar1")).sendKeys("10"); // Enter value 50 in the second number of the percent Calculator driver.findElement(By.id("cpar2")).sendKeys("50"); // Click Calculate Button driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click(); // Get the Result Text based on its xpath String result = driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText(); // Print a Log In message to the screen System.out.println(" The Result is " + result); //Close the Browser. driver.close(); } }
步骤 11 - 上述脚本的输出将打印在控制台中。
最常用的命令
下表列出了 WebDriver 中一些最常用的命令及其语法。
先生。 | 命令与说明 |
---|---|
1 | 驱动程序.get("URL") 导航到应用程序。 |
2 | element.sendKeys("输入文本") 在输入框中输入一些文本。 |
3 | 元素.clear() 清除输入框中的内容。 |
4 | select.取消全选() 取消选择页面上第一个 SELECT 中的所有 OPTION。 |
5 | select.selectByVisibleText("一些文本") 选择具有用户指定输入的选项。 |
6 | driver.switchTo().window("窗口名称") 将焦点从一个窗口移至另一个窗口。 |
7 | driver.switchTo().frame("frameName") 从一个框架摆动到另一个框架。 |
8 | driver.switchTo().alert() 帮助处理警报。 |
9 | driver.navigate().to("URL") 导航至 URL。 |
10 | driver.navigate().forward() 向前导航。 |
11 | driver.navigate().back() 导航回来。 |
12 | 驱动程序.close() 关闭与驱动程序关联的当前浏览器。 |
13 | 驱动程序.quit() 退出驱动程序并关闭该驱动程序的所有关联窗口。 |
14 | 驱动程序.刷新() 刷新当前页面。 |
Selenium - 定位器
在 Selenium WebDriver 中定位元素是借助 WebDriver 和 WebElement 类提供的 findElement() 和 findElements() 方法来执行的。
findElement() 根据指定的搜索条件返回 WebElement 对象,如果找不到任何与搜索条件匹配的元素,则最终抛出异常。
findElements() 返回与搜索条件匹配的 WebElements 列表。如果没有找到元素,则返回一个空列表。
下表列出了在 Selenium WebDriver 中定位元素的所有 Java 语法。
方法 | 句法 | 描述 |
---|---|---|
通过ID | driver.findElement(By.id (<元素 ID>)) | 使用 ID 属性定位元素 |
按名字 | driver.findElement(By.name (<元素名称>)) | 使用 Name 属性定位元素 |
按类名 | driver.findElement(By.className (<元素类>)) | 使用 Class 属性定位元素 |
按标签名称 | driver.findElement(By.tagName (<htmltagname>)) | 使用 HTML 标签定位元素 |
通过链接文本 | driver.findElement(By.linkText (<linktext>)) | 使用链接文本定位链接 |
通过部分链接文本 | driver.findElement(By.partialLinkText (<linktext>)) | 使用链接的部分文本定位链接 |
通过CSS | driver.findElement(By.cssSelector (<css 选择器>)) | 使用 CSS 选择器定位元素 |
通过 XPath | driver.findElement(By.xpath (<xpath>)) | 使用 XPath 查询定位元素 |
定位器的使用
现在让我们借助https://www.calculator.net了解每种定位器方法的实际用法
通过ID
这里借助 ID 来访问对象。在本例中,它是文本框的 ID。使用 sendkeys 方法在 ID(cdensent) 的帮助下将值输入到文本框中。
driver.findElement(By.id("cdensity")).sendKeys("10");
按名字
这里借助名称来访问对象。在本例中,它是文本框的名称。使用 sendkeys 方法在 ID(cdensent) 的帮助下将值输入到文本框中。
driver.findElement(By.name("cdensity")).sendKeys("10");
按类别名称
这里借助类名来访问对象。在本例中,它是 WebElement 的类名称。可以借助 gettext 方法访问该值。
List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));
按标签名称
元素的 DOM 标签名称可用于在 WebDriver 中定位该特定元素。借助这种方法,处理表格非常容易。看看下面的代码。
WebElement table = driver.findElement(By.id("calctable")); List<WebElement> row = table.findElements(By.tagName("tr")); int rowcount = row.size();
通过链接文本
此方法有助于定位具有匹配可见文本的链接元素。
driver.findElements(By.linkText("Volume")).click();
通过部分链接文本
此方法有助于定位具有部分匹配可见文本的链接元素。
driver.findElement(By.partialLinkText("音量")).click();
通过CSS
CSS 被用作识别 Web 对象的方法,但并非所有浏览器都支持 CSS 识别。
WebElement loginButton = driver.findElement(By.cssSelector("input.login"));
通过 XPath
XPath 代表 XML 路径语言。它是一种用于从 XML 文档中选择节点的查询语言。XPath 基于 XML 文档的树表示,并提供通过使用各种标准选择节点来在树中导航的能力。
driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");
Selenium - 用户交互
Selenium WebDriver 是 Selenium 工具集中所有可用工具中最常用的工具。因此,了解如何使用 Selenium 与 Web 应用程序交互非常重要。在本模块中,让我们了解如何使用 Selenium webDriver 与 GUI 对象交互。
我们需要通过开发没有预定义命令的用户定义函数,使用一些基本操作甚至一些高级用户操作与应用程序进行交互。
下面列出了针对这些 GUI 对象的不同类型的操作 -
Selenium - 测试设计技术
设计测试涉及各种组件。让我们了解设计框架所涉及的一些重要组件。我们将在本章中学习以下主题 -
Selenium-TestNG
TestNG是一个功能强大的测试框架,是JUnit的增强版本,在TestNG出现之前就已经使用了很长时间。NG 代表“下一代”。
TestNG 框架提供以下功能 -
- 注释可以帮助我们轻松组织测试。
- 灵活的测试配置。
- 测试用例可以更容易地分组。
- 测试的并行化可以使用 TestNG 来实现。
- 支持数据驱动测试。
- 内置报告。
为 Eclipse 安装 TestNG
步骤 1 - 启动 Eclipse 并选择“安装新软件”。
步骤 2 - 输入 URL“http://beust.com/eclipse”,然后单击“添加”。
步骤 3 - 将打开对话框“添加存储库”。输入名称“TestNG”,然后单击“确定”
步骤 4 - 单击“全选”,将选择“TestNG”,如图所示。
步骤 5 - 单击“下一步”继续。
步骤 6 - 检查所选项目并单击“下一步”。
步骤 7 - “接受许可协议”并单击“完成”。
步骤 8 - TestNG 开始安装,进度如下所示。
步骤 9 - 由于无法确定软件的有效性,因此弹出安全警告。单击“确定”。
步骤 10 - 安装程序提示重新启动 Eclipse 以使更改生效。单击“是”。
TestNG 中的注释
注解在 JDK 5 中正式添加到 Java 语言中,TestNG 选择使用注解来注解测试类。以下是使用注释的一些好处。有关 TestNG 的更多信息可以在这里找到
TestNG 通过查找注释来识别它感兴趣的方法。因此,方法名称不限于任何模式或格式。
我们可以将附加参数传递给注释。
注释是强类型的,因此编译器会立即标记任何错误。
测试类不再需要扩展任何东西(例如 JUnit 3 的 TestCase)。
先生。 | 注释和描述 |
---|---|
1 | @BeforeSuite 在该套件中的所有测试运行之前,带注释的方法将仅运行一次。 |
2 | @AfterSuite 带注释的方法将仅在该套件中的所有测试运行后运行一次。 |
3 | @课前 在调用当前类中的第一个测试方法之前,带注释的方法将仅运行一次。 |
4 | @下课以后 被注解的方法只会在当前类中的所有测试方法运行完毕后运行一次。 |
5 | @测试前 带注释的方法将在运行属于 <test> 标记内的类的任何测试方法之前运行。 |
6 | @测试后 带注释的方法将在属于 <test> 标记内的类的所有测试方法运行后运行。 |
7 | @BeforeGroups 此配置方法之前将运行的组的列表。该方法保证在调用属于任何这些组的第一个测试方法之前不久运行。 |
8 | @AfterGroups 此配置方法将在其后运行的组列表。该方法保证在调用属于任何这些组的最后一个测试方法后不久运行。 |
9 | @方法之前 带注释的方法将在每个测试方法之前运行。 |
10 | @AfterMethod 带注释的方法将在每个测试方法之后运行。 |
11 | @DataProvider 将方法标记为为测试方法提供数据。带注释的方法必须返回一个Object[][],其中每个Object[]可以分配测试方法的参数列表。想要从此 DataProvider 接收数据的 @Test 方法需要使用与该批注名称相同的 dataProvider 名称。 |
12 | @工厂 将方法标记为工厂,该工厂返回将由 TestNG 作为测试类使用的对象。该方法必须返回 Object[ ]。 |
13 | @听众 定义测试类的侦听器。 |
14 | @参数 描述如何将参数传递给@Test方法。 |
15 | @测试 将类或方法标记为测试的一部分。 |
TestNG-Eclipse 设置
步骤 1 - 启动 Eclipse 并创建一个“新 Java 项目”,如下所示。
步骤 2 - 输入项目名称并单击“下一步”。
步骤 3 - 导航到“库”选项卡,然后单击“添加外部 JAR”来添加 Selenium 远程控制服务器 JAR 文件,如下所示。
步骤 4 - 添加的 JAR 文件显示在此处。单击“添加库”。
步骤 5 - “添加库”对话框打开。选择“TestNG”,然后在“添加库”对话框中单击“下一步”。
步骤 6 - 添加添加的“TestNG”库,并显示如下。
步骤 7 - 创建项目后,项目的结构如下所示。
步骤 8 - 右键单击“src”文件夹并选择“新建>>其他”。
步骤 9 - 选择“TestNG”并单击“下一步”。
步骤 10 - 选择“源文件夹”名称并单击“确定”。
步骤 11 - 选择“包名称”、“类名称”,然后单击“完成”。
步骤 12 - 将显示包资源管理器和创建的类。
TestNG 中的第一次测试
现在让我们开始使用 TestNG 编写脚本。让我们为用于理解 WebDriver 的同一示例编写脚本。我们将使用演示应用程序www.calculator.net并执行百分比计算器。
在下面的测试中,您会注意到没有 main 方法,因为 testNG 将驱动程序执行流程。初始化驱动程序后,它将执行“@BeforeTest”方法,然后执行“@Test”,然后执行“@AfterTest”。请注意,一个类中可以有任意数量的“@Test”注释,但“@BeforeTest”和“@AfterTest”只能出现一次。
package TestNG; import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestNGClass { WebDriver driver = new FirefoxDriver(); @BeforeTest public void launchapp() { // Puts an Implicit wait, Will wait for 10 seconds before throwing exception driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to("http://www.calculator.net"); driver.manage().window().maximize(); } @Test public void calculatepercent() { // Click on Math Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click(); // Click on Percent Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click(); // Enter value 10 in the first number of the percent Calculator driver.findElement(By.id("cpar1")).sendKeys("10"); // Enter value 50 in the second number of the percent Calculator driver.findElement(By.id("cpar2")).sendKeys("50"); // Click Calculate Button driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click(); // Get the Result Text based on its xpath String result = driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText(); // Print a Log In message to the screen System.out.println(" The Result is " + result); if(result.equals("5")) { System.out.println(" The Result is Pass"); } else { System.out.println(" The Result is Fail"); } } @AfterTest public void terminatetest() { driver.close(); } }
执行
要执行,请右键单击创建的 XML 并选择“运行方式”>>“TestNG Suite”
结果分析
输出被发送到控制台,如下所示。控制台输出还有执行摘要。
TestNG 的结果也可以在不同的选项卡中看到。单击“HTML 报告视图”按钮,如下所示。
HTML 结果将显示如下。
Selenium - 网格
Selenium Grid 是一个将测试分布在多个物理机或虚拟机上的工具,以便我们可以并行(同时)执行脚本。它为我们提供快速、准确的反馈,极大地加快了跨浏览器和跨平台的测试过程。
Selenium Grid 允许我们并行执行 WebDriver 或 Selenium Remote Control 测试的多个实例,这些测试使用相同的代码库,因此代码不需要出现在它们执行的系统上。selenium-server-standalone 包包括 Hub、WebDriver 和 Selenium RC,用于在网格中执行脚本。
Selenium Grid 有一个集线器和一个节点。
集线器- 集线器也可以理解为服务器,充当触发测试的中心点。Selenium Grid 只有一个 Hub,并且在一台机器上启动一次。
节点- 节点是附加到执行测试的集线器的 Selenium 实例。网格中可以有一个或多个节点,这些节点可以是任何操作系统,并且可以包含任何 Selenium 支持的浏览器。
建筑学
下图展示了 Selenium Grid 的架构。
使用网格
为了与网格合作,我们需要遵循某些协议。下面是这个过程中涉及的主要步骤 -
- 配置集线器
- 配置节点
- 开发脚本并准备 XML 文件
- 测试执行
- 结果分析
让我们详细讨论每个步骤。
配置集线器
步骤 1 - 从http://docs.seleniumhq.org/download/下载最新的 Selenium Server 独立 JAR 文件。单击版本即可下载,如下所示。
步骤 2 - 使用以下命令启动 Selenium 服务器来启动 Hub。现在我们将使用端口“4444”来启动集线器。
注意- 确保没有其他应用程序在端口# 4444 上运行。
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
步骤 3 - 现在打开浏览器并从集线器(您执行步骤#2 的系统)导航到 URL http://localhost:4444。
步骤 4 - 现在单击“控制台”链接,然后单击“查看配置”。集线器的配置将显示如下。截至目前,我们还没有任何节点,因此我们无法看到详细信息。
配置节点
步骤 1 - 登录到节点(您要执行脚本的位置)并将“selenium-server-standalone-2.42.2”放入文件夹中。我们需要在启动节点时指向 selenium-server-standalone JAR。
步骤 2 - 使用以下命令启动 FireFox 节点。
java -jar D:\JAR\selenium-server-standalone-2.42.2.jar -role node -hub http://10.30.217.157:4444/grid/register -browser browserName = firefox -port 5555
在哪里,
D:\JAR\selenium-server-standalone-2.42.2.jar = Selenium 服务器独立 Jar 文件的位置(在节点计算机上)
http://10.30.217.157:4444 = 集线器的 IP 地址,4444 是集线器的端口
browserName = firefox(用于指定节点上的浏览器名称的参数)
5555 = Firefox 节点启动并运行的端口。
步骤 3 - 执行命令后,返回集线器。导航到 URL - http://10.30.217.157:4444,集线器现在将显示附加到它的节点。
步骤 4 - 现在让我们启动 Internet Explorer 节点。为了启动 IE 节点,我们需要在节点计算机上下载 Internet Explorer 驱动程序。
步骤 5 - 要下载 Internet Explorer 驱动程序,请导航至http://docs.seleniumhq.org/download/并根据操作系统的体系结构下载适当的文件。下载后,解压 exe 文件并将其放入启动 IE 节点时必须引用的文件夹中。
步骤 6 - 使用以下命令启动 IE。
C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe -jar D:\JAR\selenium-server-standalone-2.42.2.jar -role webdriver -hub http://10.30.217.157:4444/grid/register -browser browserName = ie,platform = WINDOWS -port 5558
在哪里,
D:\IEDriverServer.exe = 下载的 IE 驱动程序的位置(在节点计算机上)
D:\JAR\selenium-server-standalone-2.42.2.jar = Selenium 服务器独立 Jar 文件的位置(在节点计算机上)
http://10.30.217.157:4444 = 集线器的 IP 地址,4444 是集线器的端口
browserName = ie(指定节点上浏览器名称的参数)
5558 = IE 节点启动并运行的端口。
步骤 7 - 执行命令后,返回集线器。导航到 URL - http://10.30.217.157:4444,集线器现在将显示附加到它的 IE 节点。
步骤 8 - 现在让我们启动 Chrome Node。为了启动 Chrome 节点,我们需要在节点计算机上下载 Chrome 驱动程序。
步骤 9 - 要下载 Chrome 驱动程序,请导航至http://docs.seleniumhq.org/download/,然后导航至第三方浏览器驱动程序区域并单击版本号“2.10”,如下所示。
步骤 10 - 根据您的操作系统类型下载驱动程序。我们将在Windows环境下执行它,因此我们将下载Windows Chrome驱动程序。下载后,解压 exe 文件并将其放置在启动 chrome 节点时必须引用的文件夹中。
步骤 11 - 使用以下命令启动 Chrome。
C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe -jar D:\JAR\selenium-server-standalone-2.42.2.jar -role webdriver -hub http://10.30.217.157:4444/grid/register -browser browserName = chrome, platform = WINDOWS -port 5557
在哪里,
D:\chromedriver.exe = 下载的 chrome 驱动程序的位置(在节点计算机上)
D:\JAR\selenium-server-standalone-2.42.2.jar = Selenium 服务器独立 Jar 文件的位置(在节点计算机上)
http://10.30.217.157:4444 = 集线器的 IP 地址,4444 是集线器的端口
browserName = chrome(指定节点上浏览器名称的参数)
5557 = chrome 节点启动并运行的端口。
步骤 12 - 执行命令后,返回集线器。导航到 URL - http://10.30.217.157:4444,Hub 现在将显示附加到它的 chrome 节点。
开发脚本并准备 XML 文件
步骤 1 - 我们将使用 TestNG 开发测试。在下面的示例中,我们将使用远程 webDriver 启动每一个浏览器。它可以将它们的功能传递给驱动程序,以便驱动程序拥有在节点上执行的所有信息。
浏览器参数将从“XML”文件传递。
package TestNG; import org.openqa.selenium.*; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import java.net.URL; import java.util.concurrent.TimeUnit; import java.net.MalformedURLException; public class TestNGClass { public WebDriver driver; public String URL, Node; protected ThreadLocal<RemoteWebDriver> threadDriver = null; @Parameters("browser") @BeforeTest public void launchapp(String browser) throws MalformedURLException { String URL = "http://www.calculator.net"; if (browser.equalsIgnoreCase("firefox")) { System.out.println(" Executing on FireFox"); String Node = "http://10.112.66.52:5555/wd/hub"; DesiredCapabilities cap = DesiredCapabilities.firefox(); cap.setBrowserName("firefox"); driver = new RemoteWebDriver(new URL(Node), cap); // Puts an Implicit wait, Will wait for 10 seconds before throwing exception driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to(URL); driver.manage().window().maximize(); } else if (browser.equalsIgnoreCase("chrome")) { System.out.println(" Executing on CHROME"); DesiredCapabilities cap = DesiredCapabilities.chrome(); cap.setBrowserName("chrome"); String Node = "http://10.112.66.52:5557/wd/hub"; driver = new RemoteWebDriver(new URL(Node), cap); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to(URL); driver.manage().window().maximize(); } else if (browser.equalsIgnoreCase("ie")) { System.out.println(" Executing on IE"); DesiredCapabilities cap = DesiredCapabilities.chrome(); cap.setBrowserName("ie"); String Node = "http://10.112.66.52:5558/wd/hub"; driver = new RemoteWebDriver(new URL(Node), cap); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to(URL); driver.manage().window().maximize(); } else { throw new IllegalArgumentException("The Browser Type is Undefined"); } } @Test public void calculatepercent() { // Click on Math Calculators driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click(); // Click on Percent Calculators driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click(); // Enter value 10 in the first number of the percent Calculator driver.findElement(By.id("cpar1")).sendKeys("10"); // Enter value 50 in the second number of the percent Calculator driver.findElement(By.id("cpar2")).sendKeys("50"); // Click Calculate Button // driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click(); // Get the Result Text based on its xpath String result = driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText(); // Print a Log In message to the screen System.out.println(" The Result is " + result); if(result.equals("5")) { System.out.println(" The Result is Pass"); } else { System.out.println(" The Result is Fail"); } } @AfterTest public void closeBrowser() { driver.quit(); } }
步骤 2 - 将使用 XML 传递浏览器参数。在项目文件夹下创建一个 XML。
步骤 3 - 选择“文件”f