WebdriverIO v5 發布
我們很高興地宣布,WebdriverIO 的新主要版本終於發布了!我從未想過會花這麼長的時間(已經超過一年了),但我們終於可以說 WebdriverIO 的新版本已經可以使用了(而且比以往更好)。來自超過 34 位不同貢獻者的 800 多個 commit;我衷心感謝每一位參與這項集體努力的人。話雖如此...
🎉 🎉 🎉 是時候慶祝了!🎉 🎉 🎉
當我開始從頭開始實際重寫這個專案時 一年前,我知道這裡那裡會出現問題。然而,我確信 WebdriverIO 社群會在支援管道中共同努力互相幫助;我很自豪地說,我說對了!
目標
回顧專案的歷史,令人謙卑地看到它在短短幾年內成長了多少。從每天少數下載到現在幾乎 5 萬次;以及大型公司每天都依賴此工具來交付他們的軟體,這顯而易見,下一個重要功能必須是永續性。第一步是在 2017 年加入 JS.Foundation。
很榮幸地宣布 @webdriverio 加入 @the_jsf,以繼續作為專案和社群成長 🎉 👏 https://127.0.0.1/N58Iv5oC9r
— WebdriverIO (@webdriverio) 2017 年 9 月 13 日
下一步是實施一個允許專案成長的技術基礎架構。透過檢閱其他成功的開源專案,例如 Jest 或 Babel,我們採用了單一專案結構,以簡化向 WebdriverIO 貢獻的流程。
我們希望完全由社群驅動這項工作,並開始收集每天使用 WebdriverIO 的每個人的回饋。我們建立了一個 Discord 伺服器,以便討論架構變更,並組織將套件移植到新的技術堆疊的工作,即 Lerna。
新的套件結構
當我們遷移到單一系統時,我們將所有 WebdriverIO 套件納入 @wdio
NPM 組織。這將使貢獻者更容易加入以發布新的套件版本,並更好地澄清哪些套件是「官方」由該組織維護,或是第三方的社群套件。
如果您在專案中一直使用 wdio-mocha-framework
或 wdio-spec-reporter
,請更新套件以使用為 v5 建置的套件:@wdio/mocha-framework
或 @wdio/spec-reporter
。展望未來,所有套件的版本號碼現在都相互固定;這表示您應該始終對您使用的所有「官方」WebdriverIO 套件使用相同的版本。
我們做了一些春季大掃除
當人們向 API 提出新的命令時,我們貢獻者越來越猶豫是否要引入它們。現有命令數量龐大;而且許多請求的命令與現有命令幾乎沒有差異。這開始成為維護的噩夢。
從 v5 開始,我們建立了一個名為 webdriver
的「基本」WebdriverIO 套件。它包含向 WebDriver 端點發出 HTTP 請求的基本邏輯;並包含來自 各種規範 的所有命令(包括 WebDriver 規範以及 Appium 的 行動 JSONWire 協定),這些命令在簡單易於維護的 JSON 物件中定義。
作為該工作的一部分,我們重新命名了許多命令,以便使其更符合協定中使用的模式。基本的 WebDriver 用戶端現在也傳回所有協定命令回應的 value
屬性,因此我們能夠擺脫許多冗餘(例如,title
現在以 getTitle
呼叫)。
此外,我們發現對於 WebdriverIO API 以及它有時將選取器作為第一個引數,有時則不然的事實,造成了極大的混淆。這造成了各種問題,例如,為其建置一致且有用的 TypeScript 定義。在新版本中,**我們擺脫了選取器作為命令參數**,並強制執行只能從瀏覽器/用戶端實例存取以及從元素實例存取的命令之間的差異。為了點選元素,您現在必須先擷取它,然後在該實例上呼叫點選命令,例如
browser.click('#elem') // throws 'browser.click is not a function'
const elem = $('#elem')
elem.click() // clicks successfully on the element
// or
$('#elem').click()
elem.url('https://webdriverio.dev.org.tw') // throws because the url command is scoped on the browser object
網站變更
我們已經有一個自動系統,為我們的網站產生文件。然而,作為新架構和技術堆疊的一部分,我們將此從 Hexo 移植到 Docusaurus。
我們仍在完成這項工作,因為我們希望繼續為每個人提供一種輕鬆變更文件版本的方式。我們也在考慮提供文件的多種翻譯版本,以便不懂英文的人可以更好地理解和使用 WebdriverIO。如果您想幫忙,請在 Twitter 上或直接在問題執行緒上聯絡我們。這可能是參與開源專案的最佳方式之一。
如何升級到 v5
在過去一年中,我們一直在研究更多您可能想閱讀的內容。查看官方的變更記錄,以找到描述新版本的所有變更。隨著時間的推移,我們可能會繼續更新它,因為我們無法保留每個變更細節的清單。我們也想請您查看新的指南區段和我們一般更新的文件。
遺憾的是,沒有簡單的升級工具可以下載並執行,以將您的測試套件從 v4 更新到 v5(即使我們很希望有這樣一個工具,歡迎 PR 😉)。如果您在升級到 v5 時遇到任何問題,請加入我們在 Discord 上的支援伺服器並聯絡我們。
每個專案都不同,因此不可能為每個人提供單一指南。但是,以下逐步描述將幫助您更接近您需要的位置
- 閱讀變更記錄,以了解所有重大變更
- 從您的
package.json
中移除所有wdio-*
套件 - 移除您的
node_modules
目錄 - 安裝最新版本的 webdriverio:
$ npm install webdriverio@latest
- 安裝新的 wdio 測試執行器:
$ npm install @wdio/cli --save-dev
- 如果您的根目錄中有
wdio.conf.js
,請建立備份:$ cp wdio.conf.js wdio_backup.conf.js
- 重新執行設定精靈:
$ npx wdio config
- 將舊的
wdio_backup.conf.js
中的自訂修改合併到新的設定檔中。不要一次合併所有內容 - 先從基本設定開始,不使用任何服務,只使用例如 spec 報告器在本機執行測試,然後逐步進行完整的遷移。 - 選取測試套件中最簡單的測試,並根據變更日誌重新命名指令。
- 在設定檔中設定您的日誌目錄 (例如
outputDir: __dirname
),以確保您可以看到所有正在發生的事情,包括錯誤 (您稍後可以將其設定為適當的日誌目錄)。 - 嘗試執行您修改過的測試套件
$ npx wdio wdio.conf.js --spec ./path/to/modified/test.js
- 在您剩餘的測試檔案上重複執行。
- 將報告器和服務加回您的
wdio.conf.js
中,並查看它們是否如預期般運作 (注意:您使用的服務或報告器可能尚未移植到 v5,如果有的話,請在該社群套件的儲存庫中提出問題,或嘗試自行移植)。
如果您在移植測試套件時遇到問題,請查看問題討論串,看看是否有人已經回報了相同的問題;然後在我們的 Discord 伺服器上聯繫我們。我們可能錯過了移植 / 尚未移植您在測試中使用的功能。感謝新的專案架構,我們可以快速修復此問題並為您提供更新版本!
我們將在新部落格中發佈更多關於如何將 WebdriverIO 升級到 v5 的教學文章。您也可以查看我們敬愛的 Will Brock 關於新版本的精彩影片系列。 WebdriverIO 學習課程的更新也在進行中。
下一步
我們投入這麼多努力在這個專案上並不是要在此結束。相反的,我們才剛開始。我們真心相信 WebDriver 現在是,而且永遠都會是業界的自動化標準。因此,我們積極參與標準的貢獻,以確保所有指令都符合協定。我們也會將您的常見問題和一般回饋帶回 W3C 工作小組,以確保我們可以解決這項技術核心的重大問題。
為了確保 @webdriverio 始終符合 #WebDriver 標準,它會直接派遣代表參加 @w3c TPAC 會議,以便您可以在最新功能可用時立即使用 🙌🏻 pic.twitter.com/oJbHPn99Oc
— WebdriverIO (@webdriverio) 2018 年 10 月 26 日
發布後,我們將開始制定未來一年的詳細路線圖,讓您可以參與進度並協助我們確定功能的優先順序。
用 ❤️ 打造的開源專案
在結束這篇部落格文章之前,我想說明一下,WebdriverIO 是一個開源專案,由熱愛開源的專注人員維護。我經常覺得人們把這項工作視為理所當然,而忘記了有真實的人在花費他們的空閒時間,免費為大家提供一些軟體。正如 @left_pad 在 Babel7 的正式發布中所述
「[...] 當我看到有人在網路上發訊息,想知道為什麼還沒有發布某些東西,而另一個人則問為什麼這個錯誤還沒有修復時,我只能用恐懼來形容。我想趕快把它完成,但也渴望認真對待這件事。」
請始終記住,當您提出問題或要求一個功能時,您基本上是在要求某人花時間為您免費提供這些東西!只有當每個人都參與並協助做一些事情時,開源專案才能運作並生存下去。我們都是人,難免會發生錯誤,如果您發現了錯誤,請以我們可以輕鬆處理資訊並快速修復的方式告知我們。如果每個人偶爾花一些時間回饋貢獻,那就更好了。我們正在維護一份詳細描述的問題清單,任何人都可以認領並開始處理。
再次強調,這個專案不是由任何公司贊助或擁有。這是一個包容性社群的共同努力,他們樂於互相幫助。讓我們繼續保持這種狀態!
感謝您
最後,我要感謝一些人,他們協助促成了這次發布;以及/或者在社群中是非常棒的人。首先,我要感謝參與實現這一目標的所有 34 位貢獻者,以及自開始以來一直在合作的其他 328 位人士。
我個人要感謝 Kevin Lamping 製作了出色的 線上學習課程,以及過去幾年來在 YouTube 上提供的許多精彩內容。如上所述 - 也要非常感謝 Will Brock 為新版本提供的 影片課程。
我要感謝每天在支援頻道中深入幫助人們的每個人。由於使用者超過 3500 人,我已經無法像以前那樣回答每個人的問題。感謝 Erwin Heitzman、Tu Huynh、Jim Davis、Xu Cao、Boris Osipov 和 Wim Selles。
特別向 Daniel Chivescu 和 Josh Cypher 致意,他們一直在世界各地就 WebdriverIO 發表演講。
最後但同樣重要的是,感謝 Adam Bjerstedt,他不僅在社群頻道中提供協助;還協助推動了 v5 的發布。
🙏