組件物件模型(Component Object Model (COM))是一種設計模式,允許您在測試自動化項目中結構化測試。受到流行的頁面物件模型(Page Object Model (POM))的啟發,COM 超越了處理整個頁面,專注於特定的 UI 元件,例如按鈕、文本框、下拉選單或其他可重用的元素。
在本教程中,我們將解釋如何實現 COM 來測試使用 Selenium WebDriver 和 Cucumber 的網頁應用程式,以及這種方法如何使您的測試更加靈活、模組化且更易於維護。
什麼是組件物件模型?
組件物件模型(Component Object Model (COM))是 POM 模型 的演進。COM 不再將整個頁面建模為一個對象,並與所有頁面元素互動的方法,而是將用戶界面拆分為單個組件,例如:
- 按鈕
- 文本框
- 下拉選單
- 搜尋欄
- 表格
每個元件都封裝在一個Java類中,其互動由特定方法管理,使得每個元素都可以獨立維護和測試。這提高了代碼的可重用性、維護性和在測試中的靈活性。
為什麼使用COM而不是POM?
1. 增加模塊化
使用COM,每個組件(如按鈕或文本字段)都是獨立的實體。如果組件變化(例如按鈕的文本變化),您只需修改該組件類,而不會影響其他組件或頁面。這有助於實現高度的模塊化,避免因輕微調整而需要修改整個頁面。
2. 可重用性和靈活性
組件可以在應用程序的多個頁面中重複使用,減少代碼重複。例如,一個ButtonComponent
可以在按鈕出現的任何頁面上使用,減少了冗余並增加了測試的靈活性。
3. 簡化維護
使用COM維護更加簡單。如果組件發生變化(例如按鈕或文本字段),您只需修改代表該組件的類。所有使用該組件的測試將自動更新,而無需重新檢查每個測試場景。
4. 適應動態界面
現代應用程序通常是動態的,界面經常變化。COM非常適合這樣的應用程序,因為它允許獨立於界面測試組件。您可以修改或添加組件,而不影響應用程序其他部分的測試。
5. 更快的測試自動化
COM加快了測試自動化的速度。通過將與組件的交互集中到可重複使用的類中,測試人員無需為每個頁面或組件重新定義操作。例如,一個單步定義的動作“點擊按鈕”可以在項目中的所有測試中使用,從而顯著減少自動化測試所需的時間。
6. 避免測試人員之間的重複工作
通過COM,測試人員不再需要為每個測試重複相同的工作。為常見操作(如“點擊按鈕”或“輸入文本”)集中的步驟定義可以被項目中的所有測試人員使用。這確保了測試的一致性,同時避免不必要的重複,提高了測試人員之間的效率和協作。
COM項目架構
基於COM的項目架構主要圍繞著三個主要元素展開: 組件, 步驟定義和 運行器。
1. 組件
每個組件代表一個 UI 元素,例如按鈕、文本框或下拉菜單。這些類別封裝了與該元素的所有可能互動。
這是一個 ButtonComponent
類別的範例:
public class ButtonComponent {
private WebDriver driver;
public ButtonComponent(WebDriver driver) {
this.driver = driver;
}
public void clickButton(String buttonText) {
WebElement button = driver.findElement(By.xpath("//button[text()='" + buttonText + "']"));
button.click();
}
}
2. 步驟定義
步驟定義 將在 Gherkin 文件中定義的步驟與組件中的方法連結。它們負責與組件互動並實施測試場景中指定的行動。
這是一個 ButtonStepDefinition
的範例:
public class ButtonStepDefinition {
private ButtonComponent buttonComponent;
public ButtonStepDefinition(WebDriver driver) {
this.buttonComponent = new ButtonComponent(driver);
}
@When("I click on the button {string}")
public void iClickOnTheButton(String buttonText) {
buttonComponent.clickButton(buttonText);
}
}
3. 執行器
執行器 類別負責使用 JUnit 或 TestNG 執行測試。它配置 Cucumber 以加載在 .feature
文件中定義的測試場景並使用步驟定義執行它們。
這是一個 TestRunner
的範例:
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/features",
glue = "com.componentObjectModel.stepDefinitions",
plugin = {"pretty", "html:target/cucumber-reports.html"}
)
public class TestRunner {
}
撰寫和解釋 Gherkin 場景
使用 Cucumber 進行自動化的基本要素之一是使用 Gherkin 語言來撰寫測試場景。Gherkin 使您能夠以可讀和易懂的方式描述測試,即使對非技術人員來說也是如此。
讓我們考慮一個場景,我們想測試與先前定義的 ButtonComponent
的按鈕互動。以下是它在 Gherkin 中的寫法:
Scenario: User clicks on the "Submit" button Given I am on the login page When I click on the button "Submit" Then I should be redirected to the homepage
場景說明
場景
此場景描述了一個用戶在登錄頁面上點擊「提交」按鈕的操作,並確保他們在點擊後被重定向到首頁。
- 假設我在登錄頁面上: 測試的初始狀態是用戶在登錄頁面上。
- 當我點擊「提交」按鈕」: 測試中執行的操作是點擊「提交」按鈕。
- 然後,我應該被重定向到首頁: 預期的驗證是用戶在點擊按鈕後被重定向到首頁。
與COM的鏈接
此場景中的每一步都映射到步驟定義中,在ButtonStepDefinition
中,點擊操作由ButtonComponent
處理,使測試模組化且易於維護。
附加說明
注意這些步驟使用了 顯示的文本 在按鈕上(或輸入欄位中的佔位符等)作為參數。這使得場景更加 可讀且通用。例如,在上面的場景中,按鈕“提交”的文本被直接用在步驟“當我點擊按鈕 ‘提交.’”中。這樣,相同的 步驟定義 可以重複使用來測試另一個按鈕,例如“登入,”只需在 Gherkin 場景中更改文本即可。這提高了測試代碼的重用性,同時使場景更加直觀和靈活。
使用 COM 的步驟重用性
其中一個 COM 的主要優勢是不同按鈕的 步驟定義 的重用性。例如,相同的步驟 當我點擊按鈕 {string}
可以用於所有按鈕,而不管按鈕上顯示的文本。COM 方法允許您根據按鈕文本動態參數化點擊操作。
讓我們考慮另一個有不同按鈕的場景:
場景
User clicks on the "Login" button
Given I am on the login page
When I click on the button "Login"
Then, I should be redirected to the dashboard
在 這兩種情況中,將使用相同的 clickButton
方法在 ButtonComponent
中,但按鈕文本將根據場景而改變。這展示了 COM 如何允許重用相同的組件和步驟定義,使測試靈活且模組化。
COM 如何改善測試自動化
COM 在多方面改善測試自動化:
- 減少代碼重複:通過使用可重用的組件,您可以減少測試中的代碼重複。例如,在應用程序的多個頁面上使用的
ButtonComponent
消除了編寫重複測試的需要。 - 更具可讀性和可修改的測試:測試更加清晰易懂,因為它們與特定頁面的實現細節解耦。您可以專注於與組件的互動,而不必擔心底層頁面結構。
- 維護簡單:對組件的任何修改(例如,按鈕文本的變更)僅影響組件類,而不影響測試。這使得維護變得更加簡單和快速。
- 更靈活的測試:測試可以輕鬆適應變化的用戶界面,因為組件彼此獨立。您可以測試新組件或替換現有組件,而不影響其他測試。
什麼時候建議使用 COM 設計模式?
如果被測試的網頁應用程序為所有組件使用統一的設計系統,則建議使用此設計模式。例如,如果所有按鈕以相同的方式聲明,並且所有 UI 元素具有一致的結構。在這種情況下,使用 COM 可以集中管理與每種類型組件(例如按鈕、文本框等)的互動,使測試更加模塊化、可重用且易於維護。
在多個產品中重用步驟定義
如果您正在開發和測試多個使用相同設計系統的產品,您可以創建一個涵蓋所有步驟定義和動作(或幾乎所有)的庫,以便為每個組件使用。這使得測試人員可以專注於編寫 Gherkin 場景,測試將自動化進行。由於所有網頁元素都是以相同的方式編寫(HTML),按鈕、文本框和其他 UI 元素等組件將在所有項目中一致地運行。
因此,測試人員不再需要重複相同的任務——為多個項目中相同的組件定義步驟定義和動作。這種方法節省了時間並提高了可維護性。如果一個網頁元素被修改(例如,如果 XPath 改變),您只需在共享庫中更新該元素,該修改將自動應用於所有自動化項目。這減少了錯誤的風險,並使不同產品之間的更新更高效。
結論
組件對象模型(COM)是一種強大的設計模式,用於組織測試自動化。通過專注於可重用的組件,COM 使您能夠創建更模塊化、可維護和可擴展的測試。這種模式對於現代應用特別有用,因為用戶界面變化迅速,而與獨立組件的交互至關重要。
透過可重用的測試、簡化的維護和靈活的架構,COM 是在 Selenium 和 Cucumber 專案中進行測試自動化的理想解決方案。
Source:
https://dzone.com/articles/com-design-pattern-selenium-and-cucumber