- Selenium 教程
- Selenium - 首頁
- Selenium - 概述
- Selenium - 元件
- Selenium - 自動化測試
- Selenium - 環境設定
- Selenium - 遠端控制
- Selenium IDE 教程
- Selenium - IDE 簡介
- Selenium - 特性
- Selenium - 限制
- Selenium - 安裝
- Selenium - 建立測試
- Selenium - 建立指令碼
- Selenium - 控制流
- Selenium - 儲存變數
- Selenium - 警報和彈出視窗
- Selenium - Selenese 命令
- Selenium - 操作命令
- Selenium - 訪問器命令
- Selenium - 斷言命令
- Selenium - Assert/Verify 方法
- Selenium - 定位策略
- Selenium - 指令碼除錯
- Selenium - 驗證點
- Selenium - 模式匹配
- Selenium - JSON 資料檔案
- Selenium - 瀏覽器執行
- Selenium - 使用者擴充套件
- Selenium - 程式碼匯出
- Selenium - 程式碼輸出
- Selenium - JavaScript 函式
- Selenium - 外掛
- Selenium WebDriver 教程
- Selenium - 簡介
- Selenium WebDriver 與 RC
- Selenium - 安裝
- Selenium - 第一個測試指令碼
- Selenium - 驅動程式會話
- Selenium - 瀏覽器選項
- Selenium - Chrome 選項
- Selenium - Edge 選項
- Selenium - Firefox 選項
- Selenium - Safari 選項
- Selenium - 雙擊
- Selenium - 右鍵點選
- Python 中的 HTML 報告
- 處理編輯框
- Selenium - 單個元素
- Selenium - 多個元素
- Selenium Web 元素
- Selenium - 檔案上傳
- Selenium - 定位器策略
- Selenium - 相對定位器
- Selenium - 查詢器
- Selenium - 查詢所有連結
- Selenium - 使用者互動
- Selenium - WebElement 命令
- Selenium - 瀏覽器互動
- Selenium - 瀏覽器命令
- Selenium - 瀏覽器導航
- Selenium - 警報和彈出視窗
- Selenium - 處理表單
- Selenium - 視窗和選項卡
- Selenium - 處理連結
- Selenium - 輸入框
- Selenium - 單選按鈕
- Selenium - 複選框
- Selenium - 下拉框
- Selenium - 處理 IFrame
- Selenium - 處理 Cookie
- Selenium - 日期時間選擇器
- Selenium - 動態 Web 表格
- Selenium - Actions 類
- Selenium - Action 類
- Selenium - 鍵盤事件
- Selenium - 鍵上/下
- Selenium - 複製和貼上
- Selenium - 處理特殊鍵
- Selenium - 滑鼠事件
- Selenium - 拖放
- Selenium - 筆事件
- Selenium - 滾動操作
- Selenium - 等待策略
- Selenium - 顯式/隱式等待
- Selenium - 支援特性
- Selenium - 多選
- Selenium - 等待支援
- Selenium - 選擇支援
- Selenium - 顏色支援
- Selenium - ThreadGuard
- Selenium - 錯誤和日誌記錄
- Selenium - 異常處理
- Selenium - 雜項
- Selenium - 處理 Ajax 呼叫
- Selenium - JSON 資料檔案
- Selenium - CSV 資料檔案
- Selenium - Excel 資料檔案
- Selenium - 跨瀏覽器測試
- Selenium - 多瀏覽器測試
- Selenium - 多視窗測試
- Selenium - JavaScript 執行器
- Selenium - 無頭執行
- Selenium - 捕獲螢幕截圖
- Selenium - 捕獲影片
- Selenium - 頁面物件模型
- Selenium - 頁面工廠
- Selenium - 記錄和回放
- Selenium - 框架
- Selenium - 瀏覽上下文
- Selenium - DevTools
- Selenium Grid 教程
- Selenium - 概述
- Selenium - 架構
- Selenium - 元件
- Selenium - 配置
- Selenium - 建立測試指令碼
- Selenium - 測試執行
- Selenium - 端點
- Selenium - 自定義節點
- Selenium 報告工具
- Selenium - 報告工具
- Selenium - TestNG
- Selenium - JUnit
- Selenium - Allure
- Selenium & 其他技術
- Selenium - Java 教程
- Selenium - Python 教程
- Selenium - C# 教程
- Selenium - Javascript 教程
- Selenium - Kotlin 教程
- Selenium - Ruby 教程
- Selenium - Maven 和 Jenkins
- Selenium - 資料庫測試
- Selenium - LogExpert 日誌記錄
- Selenium - Log4j 日誌記錄
- Selenium - Robot Framework
- Selenium - AutoIT
- Selenium - Flash 測試
- Selenium - Apache Ant
- Selenium - Github 教程
- Selenium - SoapUI
- Selenium - Cucumber
- Selenium - IntelliJ
- Selenium - XPath
- Selenium 雜項概念
- Selenium - IE 驅動程式
- Selenium - 自動化框架
- Selenium - 關鍵字驅動框架
- Selenium - 資料驅動框架
- Selenium - 混合驅動框架
- Selenium - SSL 證書錯誤
- Selenium - 替代方案
- Selenium 有用資源
- Selenium - 問答
- Selenium - 快速指南
- Selenium - 有用資源
- Selenium - 自動化實踐
- Selenium - 討論
Selenium - 快速指南
Selenium - 概述
介紹
Selenium 是一種開源且可移植的自動化軟體測試工具,用於測試 Web 應用程式。它能夠跨不同的瀏覽器和作業系統執行。Selenium 不僅僅是一個工具,而是一套工具,它可以幫助測試人員更有效地自動化基於 Web 的應用程式。
現在讓我們瞭解 Selenium 套件中提供的每個工具及其用法。
| 序號 | 工具和描述 |
|---|---|
| 1 | Selenium IDE Selenium **I**ntegrated **D**evelopment **E**nvironment (IDE) 是一個 Firefox 外掛,它允許測試人員在執行他們需要測試的工作流程時記錄他們的操作。 |
| 2 | Selenium RC Selenium **R**emote **C**ontrol (RC) 是旗艦測試框架,它允許執行簡單的瀏覽器操作和線性執行之外的操作。它利用 Java、C#、PHP、Python、Ruby 和 PERL 等程式語言的全部功能來建立更復雜的測試。 |
| 3 | Selenium WebDriver Selenium WebDriver 是 Selenium RC 的繼任者,它將命令直接傳送到瀏覽器並檢索結果。 |
| 4 | Selenium Grid 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 使用者擴充套件
允許使用者自定義或新增新功能的 JavaScript。 |
| 8 | 不同瀏覽器執行
本節介紹如何在不同的瀏覽器上執行 Selenium IDE 指令碼。 |
Selenium - 環境設定
為了開發 Selenium RC 或 WebDriver 指令碼,使用者必須確保他們已經完成了初始配置。設定環境包括以下步驟。
- 下載並安裝 Java
- 下載並配置 Eclipse
- 配置 FireBug 和 FirePath
- 配置 Selenium RC
- 配置 Selenium WebDriver
下載並安裝 Java
為了使用 Selenium WebDriver/Selenium,我們需要安裝 JDK(Java 開發工具包)。讓我們看看如何下載和安裝 Java。
步驟 1 - 導航到 URL。
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 開發人員”>>“Firebug”來啟動外掛。
步驟 4 - FirePath 是一種在 Firebug 中工作的外掛,它可以幫助使用者獲取元素的“XPath”。透過導航到“https://addons.mozilla.org/en-US/firefox/addon/firepath/”安裝 FirePath。
步驟 5 - 向用戶顯示載入項安裝程式,點選“安裝”按鈕即可安裝。
步驟 6 - 現在透過導航到“工具”>>“Web 開發人員”>>“Firebug”啟動“Firebug”。
示例
現在讓我們瞭解如何使用 FireBug 和 FirePath 以及一個示例。為了演示,我們將使用 www.google.com 並捕獲“google.com”文字框的屬性。
步驟 1 - 首先點選以下螢幕截圖中突出顯示的箭頭圖示,並將其拖動到我們想要捕獲其屬性的物件上。物件的 HTML/DOM 將如下所示顯示。我們能夠捕獲輸入文字框的“ID”,我們可以透過它進行互動。
步驟 2 - 要獲取物件的 XPath,請轉到“firepath”選項卡並執行以下步驟。
- 點選“Spy”圖示。
- 選擇我們想要捕獲其 XPath 的控制元件。
- 將生成所選控制元件的 XPath。
配置 Selenium RC
現在讓我們看看如何配置 Selenium 遠端控制。我們將在後面的章節中瞭解如何使用 Selenium RC 開發指令碼,但現在,我們將僅瞭解其配置部分。
步驟 1 - 導航到 Selenium 下載部分 http://www.seleniumhq.org/download/ 並透過點選其版本號下載 Selenium Server,如下所示。
步驟 2 - 下載後,我們需要啟動 Selenium Server。為此,請開啟命令提示符並導航到儲存下載的 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 遠端控制 (RC) 是 Selenium 的主要專案,在 Selenium WebDriver(Selenium 2.0)出現之前,它持續了很長時間。現在 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 Server 啟動和關閉瀏覽器。此外,它還解釋和執行 Selenese 命令。它還充當 HTTP 代理,攔截和驗證在瀏覽器和被測應用程式之間傳遞的 HTTP 訊息。
客戶端庫,在每種程式語言(Java、C#、Perl、Python 和 PHP)和 Selenium-RC 伺服器之間提供介面。
RC 指令碼編寫
現在讓我們使用 Selenium 遠端控制編寫一個示例指令碼。讓我們使用 http://www.calculator.net/ 來理解 Selenium RC。我們將使用“數學計算器”模組下的“百分比計算器”執行百分比計算。
步驟 1 - 啟動 Selenium 遠端控制(使用命令提示符)。
步驟 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
| Selenium RC | Selenium WebDriver |
|---|---|
| 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 庫資料夾中所有 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 | driver.get("URL") 導航到應用程式。 |
| 2 | element.sendKeys("inputtext") 在輸入框中輸入一些文字。 |
| 3 | element.clear() 清除輸入框中的內容。 |
| 4 | select.deselectAll() 取消選擇頁面上第一個 SELECT 中的所有 OPTION。 |
| 5 | select.selectByVisibleText("some text") 選擇使用者指定的輸入的 OPTION。 |
| 6 | driver.switchTo().window("windowName") 將焦點從一個視窗移動到另一個視窗。 |
| 7 | driver.switchTo().frame("frameName") 在框架之間切換。 |
| 8 | driver.switchTo().alert() 幫助處理警報。 |
| 9 | driver.navigate().to("URL") 導航到 URL。 |
| 10 | driver.navigate().forward() 向前導航。 |
| 11 | driver.navigate().back() 向後導航。 |
| 12 | driver.close() 關閉與驅動程式關聯的當前瀏覽器。 |
| 13 | driver.quit() 退出驅動程式並關閉該驅動程式的所有關聯視窗。 |
| 14 | driver.refresh() 重新整理當前頁面。 |
Selenium - 定位器
Selenium WebDriver 中的元素定位是藉助 WebDriver 和 WebElement 類提供的 findElement() 和 findElements() 方法來執行的。
findElement() 根據指定的搜尋條件返回一個 WebElement 物件,或者如果找不到任何與搜尋條件匹配的元素則丟擲異常。
findElements() 返回與搜尋條件匹配的 WebElements 列表。如果未找到任何元素,則返回一個空列表。
下表列出了 Selenium WebDriver 中所有用於定位元素的 Java 語法。
| 方法 | 語法 | 描述 |
|---|---|---|
| 按 ID | driver.findElement(By.id (<element ID>)) | 使用 ID 屬性定位元素 |
| 按名稱 | driver.findElement(By.name (<element name>)) | 使用 Name 屬性定位元素 |
| 按類名 | driver.findElement(By.className (<element class>)) | 使用 Class 屬性定位元素 |
| 按標籤名 | driver.findElement(By.tagName (<htmltagname>)) | 使用 HTML 標籤定位元素 |
| 按連結文字 | driver.findElement(By.linkText (<linktext>)) | 使用連結文字定位連結 |
| 按部分連結文字 | driver.findElement(By.partialLinkText (<linktext>)) | 使用連結的部分文字定位連結 |
| 按 CSS | driver.findElement(By.cssSelector (<css selector>)) | 使用 CSS 選擇器定位元素 |
| 按 XPath | driver.findElement(By.xpath (<xpath>)) | 使用 XPath 查詢定位元素 |
定位器用法
現在讓我們藉助 https://www.calculator.net 瞭解每種定位器方法的實際用法。
按 ID
這裡使用 ID 來訪問物件。在這種情況下,它是文字框的 ID。使用 sendkeys 方法和 ID(cdensity) 將值輸入文字框。
driver.findElement(By.id("cdensity")).sendKeys("10");
按名稱
這裡使用名稱來訪問物件。在這種情況下,它是文字框的名稱。使用 sendkeys 方法和 ID(cdensity) 將值輸入文字框。
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("Volume")).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 的增強版本,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 | @BeforeClass 僅在呼叫當前類中的第一個測試方法之前執行一次註釋的方法。 |
| 4 | @AfterClass 僅在當前類中的所有測試方法都執行之後執行一次註釋的方法。 |
| 5 | @BeforeTest 在執行<test>標籤內類的任何測試方法之前執行註釋的方法。 |
| 6 | @AfterTest 在執行<test>標籤內類的所有測試方法之後執行註釋的方法。 |
| 7 | @BeforeGroups 此配置方法將在其之前執行的組列表。保證在此方法執行之前,將盡快呼叫屬於這些組中的任何一個的第一個測試方法。 |
| 8 | @AfterGroups 此配置方法將在其之後執行的組列表。保證在此方法執行之後,將盡快呼叫屬於這些組中的任何一個的最後一個測試方法。 |
| 9 | @BeforeMethod 在每個測試方法之前執行註釋的方法。 |
| 10 | @AfterMethod 註釋的方法將在每個測試方法之後執行。 |
| 11 | @DataProvider 將一個方法標記為為測試方法提供資料。被註釋的方法必須返回一個 Object[ ][ ],其中每個 Object[ ] 可以分配給測試方法的引數列表。想要從這個 DataProvider 接收資料的 @Test 方法需要使用一個數據提供程式名稱,該名稱等於此註釋的名稱。 |
| 12 | @Factory 將一個方法標記為工廠,該工廠返回將由 TestNG 用作測試類的物件。該方法必須返回 Object[ ]。 |
| 13 | @Listeners 在測試類上定義監聽器。 |
| 14 | @Parameters 描述如何將引數傳遞給 @Test 方法。 |
| 15 | @Test 將類或方法標記為測試的一部分。 |
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 套件”。
結果分析
輸出將輸出到控制檯,並將顯示如下。控制檯輸出還包含執行摘要。
TestNG 的結果也可以在不同的選項卡中檢視。單擊如下所示的“HTML 報告檢視”按鈕。
HTML 結果將顯示如下。
Selenium - Grid
Selenium Grid 是一種工具,它將測試分佈到多個物理或虛擬機器上,以便我們可以並行(同時)執行指令碼。它透過為我們提供快速準確的反饋,極大地加速了跨瀏覽器和跨平臺的測試過程。
Selenium Grid 允許我們並行執行 WebDriver 或 Selenium 遠端控制測試的多個例項,這些例項使用相同的程式碼庫,因此程式碼不需要存在於它們執行的系統上。selenium-server-standalone 包含 Hub、WebDriver 和 Selenium RC 以在網格中執行指令碼。
Selenium Grid 有一個 Hub 和一個 Node。
Hub - Hub 也可以理解為伺服器,它充當測試將被觸發的中心點。一個 Selenium Grid 只有一個 Hub,並且只在單個機器上啟動一次。
Node - Node 是附加到 Hub 的 Selenium 例項,它們執行測試。一個網格中可以有一個或多個 Node,這些 Node 可以是任何作業系統,並且可以包含任何 Selenium 支援的瀏覽器。
架構
下圖顯示了 Selenium Grid 的架構。
使用 Grid
為了使用 Grid,我們需要遵循某些協議。請聽以下步驟是此過程中涉及的主要步驟 -
- 配置 Hub
- 配置 Node
- 開發指令碼並準備 XML 檔案
- 測試執行
- 結果分析
讓我們詳細討論每個步驟。
配置 Hub
步驟 1 - 從 http://docs.seleniumhq.org/download/ 下載最新的 Selenium Server 獨立 JAR 檔案。透過單擊版本號下載它,如下所示。
步驟 2 - 使用以下命令啟動 Selenium Server 來啟動 Hub。現在我們將使用埠“4444”來啟動 Hub。
注意 - 確保沒有其他應用程式正在埠 4444 上執行。
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
步驟 3 - 現在開啟瀏覽器並導航到 Hub 的 URL http//:4444(您在其中執行步驟 2 的系統)。
步驟 4 - 現在單擊“控制檯”連結並單擊“檢視配置”。Hub 的配置將顯示如下。截至目前,我們還沒有任何 Node,因此我們將無法看到詳細資訊。
配置 Node
步驟 1 - 登入到 Node(您希望在其中執行指令碼的位置)並將“selenium-server-standalone-2.42.2”放在一個資料夾中。在啟動 Node 時,我們需要指向 selenium-server-standalone JAR。
步驟 2 - 使用以下命令啟動 Firefox Node。
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 Server 獨立 Jar 檔案的位置(在 Node 機器上)
http://10.30.217.157:4444 = Hub 的 IP 地址,4444 是 Hub 的埠
browserName = firefox(用於指定 Node 上瀏覽器名稱的引數)
5555 = Firefox Node 正在執行的埠。
步驟 3 - 執行命令後,返回到 Hub。導航到 URL - http://10.30.217.157:4444,Hub 現在將顯示附加到它的 Node。
步驟 4 - 現在讓我們啟動 Internet Explorer Node。要啟動 IE Node,我們需要在 Node 機器上下載 Internet Explorer 驅動程式。
步驟 5 - 要下載 Internet Explorer 驅動程式,請導航到 http://docs.seleniumhq.org/download/ 並根據您作業系統的體系結構下載相應的檔案。下載後,解壓縮 exe 檔案並將其放在一個資料夾中,該資料夾在啟動 IE Node 時必須引用。
步驟 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 驅動程式的位置(在 Node 機器上)
D:\JAR\selenium-server-standalone-2.42.2.jar = Selenium Server 獨立 Jar 檔案的位置(在 Node 機器上)
http://10.30.217.157:4444 = Hub 的 IP 地址,4444 是 Hub 的埠
browserName = ie(用於指定 Node 上瀏覽器名稱的引數)
5558 = IE Node 正在執行的埠。
步驟 7 - 執行命令後,返回到 Hub。導航到 URL - http://10.30.217.157:4444,Hub 現在將顯示附加到它的 IE Node。
步驟 8 - 現在讓我們啟動 Chrome Node。要啟動 Chrome Node,我們需要在 Node 機器上下載 Chrome 驅動程式。
步驟 9 - 要下載 Chrome 驅動程式,請導航到 http://docs.seleniumhq.org/download/,然後導航到“第三方瀏覽器驅動程式”區域,並單擊版本號“2.10”,如下所示。
步驟 10 - 根據您的作業系統型別下載驅動程式。我們將在 Windows 環境中執行它,因此我們將下載 Windows Chrome 驅動程式。下載後,解壓縮 exe 檔案並將其放在一個資料夾中,該資料夾在啟動 chrome Node 時必須引用。
步驟 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 驅動程式的位置(在 Node 機器上)
D:\JAR\selenium-server-standalone-2.42.2.jar = Selenium Server 獨立 Jar 檔案的位置(在 Node 機器上)
http://10.30.217.157:4444 = Hub 的 IP 地址,4444 是 Hub 的埠
browserName = chrome(用於指定 Node 上瀏覽器名稱的引數)
5557 = chrome Node 正在執行的埠。
步驟 12 - 執行命令後,返回到 Hub。導航到 URL - http://10.30.217.157:4444,Hub 現在將顯示附加到它的 chrome Node。
開發指令碼並準備 XML 檔案
步驟 1 - 我們將使用 TestNG 開發一個測試。在以下示例中,我們將使用遠端 WebDriver 啟動每個瀏覽器。它可以將其功能傳遞給驅動程式,以便驅動程式擁有在 Node 上執行的所有資訊。
瀏覽器引數將從“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 - 從“常規”中選擇“檔案”並單擊“下一步”。
步驟 4 - 輸入檔名稱並單擊“完成”。
步驟 5 - TestNg.XML 在專案資料夾下建立,如下所示。
步驟 6 - XML 檔案的內容如下所示。我們建立 3 個測試並將它們放入一個套件中,並提及 parallel="tests",以便所有測試都將並行執行。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">
<test name = "FirefoxTest">
<parameter name = "browser" value = "firefox" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
<test name = "ChromeTest">
<parameter name = "browser" value = "chrome" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
<test name = "IETest">
<parameter name = "browser" value = "ie" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
</suite>
測試執行
步驟 1 - 選擇建立的 XML;右鍵單擊並選擇“以...執行” >> “TestNG 套件”。
步驟 2 - 現在開啟 Node,我們在其中啟動了所有瀏覽器 Node。您將看到所有三個瀏覽器同時執行。
結果分析
步驟 1 - 執行完成後,我們可以像任何其他執行一樣分析結果。結果摘要列印在控制檯中,如下面的快照所示。
步驟 2 - 導航到“執行套件的結果”選項卡,TestNG 將顯示結果摘要,如下所示。
步驟 3 - 生成 HTML 後,我們將能夠以 HTML 格式檢視測試結果。
