跳到主要內容

從 Protractor

本教學適用於正在使用 Protractor 並希望將其框架遷移到 WebdriverIO 的人員。這是繼 Angular 團隊宣布 Protractor 將不再受支援之後開始的。WebdriverIO 受到了許多 Protractor 設計決策的影響,這也是它可能是最接近遷移的框架的原因。WebdriverIO 團隊感謝每位 Protractor 貢獻者的工作,並希望本教學使遷移到 WebdriverIO 變得簡單而直接。

雖然我們希望有一個完全自動化的流程來執行此操作,但現實情況並非如此。每個人都有不同的設定,並以不同的方式使用 Protractor。每個步驟都應該被視為指導,而不是逐步的指示。如果您在遷移時遇到問題,請隨時與我們聯絡

設定

Protractor 和 WebdriverIO API 實際上非常相似,以至於大多數命令都可以透過 codemod 以自動化的方式重寫。

若要安裝 codemod,請執行

npm install jscodeshift @wdio/codemod

策略

有很多遷移策略。根據您的團隊規模、測試檔案數量以及遷移的迫切性,您可以嘗試一次轉換所有測試,也可以逐個檔案轉換。鑑於 Protractor 將繼續維護到 Angular 版本 15(2022 年底),您仍然有足夠的時間。您可以同時執行 Protractor 和 WebdriverIO 測試,並開始在 WebdriverIO 中編寫新的測試。根據您的時間預算,您可以先開始遷移重要的測試案例,然後再逐步處理您甚至可以刪除的測試。

首先是設定檔

在安裝 codemod 之後,我們可以開始轉換第一個檔案。請先查看WebdriverIO 的設定選項。設定檔可能會變得非常複雜,因此可能只匯入基本部分,並在遷移需要特定選項的相應測試時,再看看其餘部分如何新增是有意義的。

對於第一次遷移,我們只轉換設定檔並執行

npx jscodeshift -t ./node_modules/@wdio/codemod/protractor ./conf.ts
資訊

您的設定檔名稱可能不同,但原理應該相同:先開始遷移設定檔。

安裝 WebdriverIO 相依性

下一步是設定一個最小的 WebdriverIO 設定,當我們從一個框架遷移到另一個框架時,我們會開始建構該設定。首先,我們透過以下方式安裝 WebdriverIO CLI

npm install --save-dev @wdio/cli

接下來,我們執行設定精靈

npx wdio config

這將引導您回答幾個問題。對於此遷移案例,您

  • 選取預設選項
  • 我們建議不要自動產生範例檔案
  • 為 WebdriverIO 檔案選取不同的資料夾
  • 並選擇 Mocha 而非 Jasmine。
為什麼選擇 Mocha?

即使您之前可能一直在使用 Protractor 和 Jasmine,Mocha 仍可提供更好的重試機制。選擇由您決定!

在簡短的問卷調查之後,精靈會安裝所有必要的套件,並將其儲存在您的 package.json 中。

遷移設定檔

在我們轉換 conf.ts 和新的 wdio.conf.ts 之後,現在是時候將設定從一個設定遷移到另一個設定了。請務必僅匯入所有測試能夠執行的必要程式碼。在我們的案例中,我們匯入 hook 函式和框架逾時。

我們現在將僅繼續使用我們的 wdio.conf.ts 檔案,因此不再需要對原始 Protractor 設定進行任何變更。我們可以還原這些變更,以便兩個框架可以並排執行,並且我們可以一次匯入一個檔案。

遷移測試檔案

我們現在已準備好匯入第一個測試檔案。若要開始簡單,讓我們從一個沒有太多對第三方套件或其他檔案(如 PageObject)的相依性的檔案開始。在我們的範例中,要遷移的第一個檔案是 first-test.spec.ts。首先建立新的 WebdriverIO 設定預期檔案的目錄,然後將其移入

mv mkdir -p ./test/specs/
mv test-suites/first-test.spec.ts ./test/specs

現在,讓我們轉換此檔案

npx jscodeshift -t ./node_modules/@wdio/codemod/protractor ./test/specs/first-test.spec.ts

就是這樣!此檔案非常簡單,因此我們不再需要任何其他變更,並且可以直接嘗試透過以下方式執行 WebdriverIO

npx wdio run wdio.conf.ts

恭喜 🥳 您剛遷移了第一個檔案!

後續步驟

從此時開始,您將繼續逐個轉換測試和逐個轉換頁面物件。codemod 有可能因某些檔案發生錯誤而失敗,例如

ERR /path/to/project/test/testdata/failing_submit.js Transformation error (Error transforming /test/testdata/failing_submit.js:2)
Error transforming /test/testdata/failing_submit.js:2

> login_form.submit()
^

The command "submit" is not supported in WebdriverIO. We advise to use the click command to click on the submit button instead. For more information on this configuration, see https://webdriverio.dev.org.tw/docs/api/element/click.
at /path/to/project/test/testdata/failing_submit.js:132:0

對於某些 Protractor 命令,WebdriverIO 中沒有替代方案。在這種情況下,codemod 將為您提供有關如何重構它的建議。如果您太常遇到此類錯誤訊息,請隨時提出問題並要求新增特定轉換。雖然 codemod 已經轉換了大多數 Protractor API,但仍有很大的改進空間。

結論

我們希望本教學能為您提供遷移到 WebdriverIO 的一些指導。社群將持續改進 codemod,同時在各種組織中的各種團隊中進行測試。如果您有任何意見回饋,請隨時提出問題,如果您在遷移過程中遇到困難,請開始討論

歡迎!我能幫上什麼忙?

WebdriverIO AI Copilot