WebdriverIO v5 リリース
WebdriverIOの新しいメジャーバージョンがついにリリースされたことをお知らせできることを嬉しく思います!こんなに時間がかかるとは思っていませんでしたが(1年以上かかりました)、WebdriverIOの新しいバージョンが使えるようになりました(そしてこれまで以上に優れています)。34人を超える貢献者から800を超えるコミットがありました。34人の異なる貢献者から;そしてこの共同作業に参加してくださった皆様に心から感謝申し上げます。さて…
🎉 🎉 🎉 お祝いしましょう! 🎉 🎉 🎉
1年前にこのプロジェクトをゼロから書き直す作業を始めたとき1年前、あちこちで問題が発生することはわかっていました。しかし、WebdriverIOコミュニティがサポートチャネルで協力して互いに助け合うだろうと確信していました。そして、私は正しかったと言えます!
目標
プロジェクトの歴史を振り返ると、わずか数年でどれほど成長したかを見るのは感慨深いものです。1日あたりのダウンロード数がわずかだったのが、今では5万件近くにまで増加し、大企業がこのツールに依存して毎日ソフトウェアをリリースしていることを考えると、次の大きな機能は持続可能性であることは明らかでした。最初のステップは、2017年にJS.Foundationに参加したことで実現しました。
プロジェクトとコミュニティの成長を続けるために、@webdriverioが@the_jsfに参加することを発表できて誇りに思います 🎉 👏 https://#/N58Iv5oC9r
— WebdriverIO (@webdriverio) 2017年9月13日
次のステップは、プロジェクトの成長を可能にする技術インフラストラクチャを実装することでした。JestやBabelなどの他の成功したオープンソースプロジェクトを参考に、WebdriverIOへの貢献プロセスを簡素化するために、モノリシックなプロジェクト構造を採用しました。
私たちは完全にコミュニティ主導でこの取り組みを始め、毎日WebdriverIOを使用しているすべての人からフィードバックを集め始めました。アーキテクチャの変更について議論し、パッケージをLernaである新しいテクノロジースタックに移行する作業を整理するために、Discordサーバーを作成しました。
新しいパッケージ構造
モノリシックシステムに移行したため、すべての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のMobile 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.dokyumento.jp') // throws because the url command is scoped on the browser object
ウェブサイトの変更
すでに、ウェブサイトのドキュメントを生成する自動化システムがありました。しかし、新しいアーキテクチャとテクノロジースタックの一環として、HexoからDocusaurusに移行しました。
ドキュメントのバージョンを簡単に変更する方法を継続的に提供したいと考えているため、この作業はまだ最終段階にあります。バージョンを変更する方法です。また、英語を話さない人がWebdriverIOをより良く理解して使用できるように、ドキュメントの複数言語への翻訳も検討しています。ご協力いただける場合は、Twitterまたは問題のスレッドで直接ご連絡ください。これは、オープンソースプロジェクトに参加する最良の方法の1つです。
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レポーターなど、基本的な設定から始め、完全な移行を目指して作業を進めます。 - スイートで最も単純なテストを取り、変更ログに従ってコマンドの名前を変更します。
- ログディレクトリをconfigファイルに設定してください(例:
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名の皆様に感謝申し上げます。
個人的には、素晴らしいオンラインラーニングコースを作成し、過去数年間にYouTubeで非常に多くの素晴らしいコンテンツを提供してくれたKevin Lamping氏に感謝します。上記のように、新しいリリースに関するビデオコースを提供してくれたWill Brock氏にも心より感謝申し上げます。
毎日多くの人々を支援してくれたサポートチャネルに深く関わってくれた皆さんに感謝します。3500人を超えるユーザーを抱えるようになり、以前のように全員に回答することが不可能になりました。Erwin Heitzman氏、Tu Huynh氏、Jim Davis氏、Xu Cao氏、Boris Osipov氏、そしてWim Selles氏に感謝します。
世界中でWebdriverIOに関する講演を行ってくれたDaniel Chivescu氏とJosh Cypher氏に感謝の意を表します。
そして最後に、コミュニティチャネルで支援してくれただけでなく、v5リリースの公開を推進してくれたAdam Bjerstedt氏に感謝します。
🙏