」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用自訂命令增強您的賽普拉斯測試

使用自訂命令增強您的賽普拉斯測試

發佈於2024-08-01
瀏覽:793

Supercharging Your Cypress Tests with Custom Commands

介紹

Cypress 是一款強大的端到端測試工具,提供一組強大的內建指令來與 Web 應用程式互動。但是,每個項目都有獨特的需求,預設命令集可能無法完全滿足這些需求。這就是自訂命令的用武之地。自訂命令可讓您擴展賽普拉斯的功能,使您的測試更具可讀性和可維護性。在這篇文章中,我們將探討如何在 Cypress 中建立和使用自訂命令來增強您的測試自動化框架。

為什麼要使用自訂命令?

自訂指令有幾個好處:

  1. 可重複使用性:封裝在多個測試中重複的常見操作。
  2. 可維護性:集中複雜操作的邏輯,因此只需在一個地方進行更改。
  3. 可讀性:透過抽象實作細節來提高測試的可讀性。

設定賽普拉斯

在我們深入建立自訂指令之前,如果您還沒有設定 Cypress,讓我們先設定一下:

npm install cypress --save-dev

安裝完成後,開啟Cypress:

npx cypress open

建立自訂命令

Cypress 自訂指令在 cypress/support/commands.js 檔案中定義。讓我們透過一些範例來了解如何建立和使用自訂命令。

範例1:登入指令
假設您有一個需要經常與之互動的登入表單。您可以建立自訂命令來處理登入過程:

// cypress/support/commands.js
Cypress.Commands.add('login', (email, password) => {
  cy.visit('/login');
  cy.get('input[name=email]').type(email);
  cy.get('input[name=password]').type(password);
  cy.get('button[type=submit]').click();
});

現在,您可以在測試中使用登入命令:

// cypress/integration/login.spec.js
describe('Login Tests', () => {
  it('Should login with valid credentials', () => {
    cy.login('[email protected]', 'password123');
    cy.url().should('include', '/dashboard');
  });
});

範例 2:帶有斷言的自訂指令
您也可以將自訂斷言新增至命令中。讓我們建立一個命令來檢查元素是否可見並包含特定文字:

// cypress/support/commands.js
Cypress.Commands.add('shouldBeVisibleWithText', (selector, text) => {
  cy.get(selector).should('be.visible').and('contain.text', text);
});

測試中的用法:

// cypress/integration/visibility.spec.js
describe('Visibility Tests', () => {
  it('Should display welcome message', () => {
    cy.visit('/home');
    cy.shouldBeVisibleWithText('.welcome-message', 'Welcome to the Dashboard');
  });
});

自訂命令的最佳實踐

  1. 清楚地命名命令:為自訂命令使用描述性名稱以使測試更易於理解。
  2. 參數化指令:接受參數使指令靈活且可重複使用。
  3. 鏈結指令: 確保指令返回 Cypress chainables (cy.wrap()) 以啟用連結。
  4. 文件指令: 新增註解來描述每個自訂指令的目的和用法。

高級技巧

  1. TypeScript 支援: 如果您使用 TypeScript,您可以為自訂命令新增類型定義以增強自動完成和類型檢查。
  2. 錯誤處理:在自訂指令中實作錯誤處理,以便在出現問題時提供資訊回饋。
  3. 可重複使用函數:對於複雜的邏輯,建立可在自訂命令中使用的輔助函數,以保持 Commands.js 檔案整齊和集中。

結論

Cypress 中的自訂命令提供了一種強大的方法來擴展框架的功能,使您的測試更具可重用性、可維護性和可讀性。透過封裝常見操作並新增自訂斷言,您可以簡化測試自動化流程並專注於最重要的事情:確保您的應用程式完美運作。

立即開始在您的賽普拉斯專案中實施自訂命令,看看它們可以在您的測試工作流程中產生的變更。測試愉快!

版本聲明 本文轉載於:https://dev.to/aswani25/supercharging-your-cypress-tests-with-custom-commands-4jlc?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼我的行動媒體查詢無法在行動裝置上運行?
    為什麼我的行動媒體查詢無法在行動裝置上運行?
    行動媒體查詢在行動裝置上不起作用:故障排除提示許多開發人員面臨行動裝置上CSS3 媒體查詢無回應的問題。如果您遇到此問題,讓我們根據您的查詢探索潛在的解決方案:在您的樣式表中,您正在使用行動裝置的媒體查詢,但在實際查看時它們似乎不起作用手機。相反,會顯示預設 CSS。 解決方案:驗證媒體查詢語法: ...
    程式設計 發佈於2024-12-21
  • 為什麼在 C++ 中使用 `` 時,`printf` 在 `std::printf` 和 `printf` 中都可以運作?
    為什麼在 C++ 中使用 `` 時,`printf` 在 `std::printf` 和 `printf` 中都可以運作?
    cstdio Stdio.h 命名空間cstdio Stdio.h 命名空間在 的C 參考文件中,它聲稱所有庫元素都駐留在std命名空間內。然而,實驗表明 std::printf 和 printf 函數呼叫都可以工作。這是否表示 C 頭檔案將符號名稱匯入 std 和全域命名空間? 答案包括 將符號...
    程式設計 發佈於2024-12-21
  • Go 中底線導入的目的是什麼?
    Go 中底線導入的目的是什麼?
    瞭解下劃線導入語句在 Go 程式設計世界中,導入語句前面的底線字元 ( _ ) 具有特定的意義。讓我們探討一下它的意義和用法。 下劃線導入的目的導入語句中的下劃線 (_ ) 表示導入該包只是為了其副作用。它不會從套件中匯入任何函數、方法或變數。 Go 套件中的副作用一些 Go 套件具有初始化函數(通...
    程式設計 發佈於2024-12-21
  • CMake 如何處理 GCC 專案中的調試和發佈建置?
    CMake 如何處理 GCC 專案中的調試和發佈建置?
    了解 CMake 中的調試與發布在 GCC 編譯專案中,CMake 為不同目標類型(調試/發布)配置建置設定提供了靈活性。以下是解決一些常見場景的方法:針對目標類型執行CMake要為偵錯和發布版本建立單獨的建置目錄,請按照下列步驟操作:mkdir Release cd Release cmake -...
    程式設計 發佈於2024-12-21
  • 我應該在 Python 腳本中使用 Shebang,如果是,使用哪一個?
    我應該在 Python 腳本中使用 Shebang,如果是,使用哪一個?
    我應該在 Python 腳本中包含 Shebang 嗎? 腳本中的 shebang 行允許直接從終端執行或透過檔案管理器,無需明確指定 python 命令。雖然它的包含是可選的,但通常被認為是一種方便的做法。 選擇正確的 Shebang 形式shebang 行的形式對於確保腳本可移植性至關重要。正確...
    程式設計 發佈於2024-12-21
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-21
  • 如何正確處理帶有空白邊界的 CSV 檔案?
    如何正確處理帶有空白邊界的 CSV 檔案?
    使用Scanner() 讀取CSV 問題使用Scanner() 讀取CSV 檔案時,通常會遇到文字包含空格的問題被移動到下一行。發生這種情況是因為 Scanner 遵循空格邊界。 Scanner() 用法中的 CSV 處理不正確提供的程式碼片段使用 Scanner() 讀取和處理 CSV 檔案。但是...
    程式設計 發佈於2024-12-21
  • 如何解決Hibernate中的LazyInitializationException?
    如何解決Hibernate中的LazyInitializationException?
    LazyInitializationException:無法從方法呼叫存取代理遇到「LazyInitializationException:無法初始化代理程式- 無會話」錯誤通常表示Hibernate 應用程式中的延遲載入問題。當您嘗試存取活動 Hibernate 會話範圍之外的延遲初始化的實體(例...
    程式設計 發佈於2024-12-21
  • 為什麼 Go 在套件中定義字串函數而不是方法?
    為什麼 Go 在套件中定義字串函數而不是方法?
    Go中基本類型的方法程式語言Go包含多種字串函數,例如ToUpper()和Split() 。與其他語言可能將這些函數定義為字串類型的方法不同,Go 將它們定義為 strings 套件的一部分。為什麼會這樣呢? 簡單性和靈活性根據Go 的創建者的說法,將方法保留在字符串等基本類型之外的主要原因之一是維...
    程式設計 發佈於2024-12-21
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-21
  • 將 Azure SQL 資料庫升級到 v12 後,為什麼會出現 TLS 握手錯誤?
    將 Azure SQL 資料庫升級到 v12 後,為什麼會出現 TLS 握手錯誤?
    v12 升級後Azure SQL 資料庫TLS 握手錯誤Azure SQL 資料庫實例升級到v12 後,您可能會遇到TLS 握手錯誤。當伺服器提供的憑證與用戶端連線字串中指定的主機名稱不符時,就會發生此錯誤。 錯誤詳細資料錯誤訊息通常表示憑證對於用戶端連線中使用的主機名稱以外的主機名稱有效。例如:T...
    程式設計 發佈於2024-12-21
  • 如何處理 SQL 資料庫中多個表的外鍵關係?
    如何處理 SQL 資料庫中多個表的外鍵關係?
    處理多個表的外鍵您有三個表:地區、國家和州。國家和國家可以屬於地區,形成等級結構。現在,您想要建立一個包含「region_id」和「popular_place_id」欄位的「popular_areas」表,並基於「popular_place_type」列在「popular_place_id」與國家或...
    程式設計 發佈於2024-12-21
  • Go 是否為 Goroutine 特定資料提供 ThreadLocal 等效項?
    Go 是否為 Goroutine 特定資料提供 ThreadLocal 等效項?
    了解Go 中的Goroutine-本地儲存在使用Go 時,開發者經常會遇到需要追蹤與特定Goroutine 相關的資訊的情況。在 Java 等其他語言中,ThreadLocal 為此任務提供了一個優雅的解決方案。 Go 是否提供類似的機制? Go 的 Goroutine 本地儲存方法Go 的標準庫不...
    程式設計 發佈於2024-12-21
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-21
  • 如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    使用Prototype 實現自動調整大小的TextArea要增強內部銷售應用程式中的使用者體驗,請考慮向用於送貨地址的文字區域。以下是實現此目的的詳細指南:目標是創建一個可以動態調整其高度以適應文字輸入的文字區域,確保最佳的空間利用率和可讀性。為此,我們將利用 JavaScript 框架 Proto...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3