Nightwatch プロジェクトの最新のアップデートや開発情報をお届けする、新しい Nightwatch エンジニアリングブログへようこそ。チュートリアルやその他の関連資料のリソースとしても活用いただけます。コンテンツは Nightwatch チームによって執筆および管理されますが、友人や協力者によるゲスト投稿が掲載される場合もあります。

背景

Nightwatch は 2014 年初頭に公開されました。エンジニアがエンドツーエンドテストを迅速かつ容易に記述できる、完全で統合されたフレームワークとして作成されました。開発にあたっては、自動 UI テストの記述と実行は簡単で快適な作業であり、設定とメンテナンスを最小限に抑えるべきであるという信念に基づいていました。

ブラウザ内部との相互作用というタスクは、既に Selenium プロジェクトによって処理されており、HTTP ベースの API を介して Selenium サーバーと連携するのは簡単な作業でした。こうして、Nightwatch は既存のさまざまなツールと技術を 1 つの使いやすい統合ソリューションにまとめることで誕生しました。

7 年後、Node.js のオープンソース テスト環境は大きく様変わりしました。過去数年間でいくつかの新しいフレームワークが登場し、それぞれが独自の機能と、自動テストの実施方法に関する独自の見解を提供しています。

一方、Selenium の json-wire プロトコル は、現在すべての主要ブラウザで実装されている W3C Webdriver 標準に移行しました。Nightwatch に関しては、戦略はそれほど変わっていません。実際、私は個人的には、オープンソース プロジェクトとして、Nightwatch が開発と成熟の次の主要段階に入ったと、より自信を持って言えます。

Nightwatch の戦略は、独自の道を進むのではなく、自動化分野で実績のある既存のツールと技術を使用してソリューションを構築することです。Selenium プロジェクト (Webdriver も含まれています) は 10 年以上にわたり、ローカル開発環境と大規模な分散クラウド インフラストラクチャの両方で、ブラウザ自動化の仕組みを常に改良および進化させてきました。だからこそ、Selenium エコシステムと連携することで、Nightwatch は約束を果たすだけでなく、期待を上回るものと確信しています。

Nightcloud.io

もう 1 つの重要なアップデートは、独自のクラウド テスト プラットフォームである Nightcloud.io の開発を中止したことです。昨年、初期パブリック ベータ版をリリースする予定でしたが、残念ながら中止しました。これにはさまざまな理由がありますが、主な理由は、Pineview.io のチームが、投資を正当化するのに十分な需要が見込めなかったことです。私たちは Nightwatch のみに焦点を当て、最も洗練されたユーザーフレンドリーなオープンソース テスト フレームワークにすることにしました。

Nightwatch V2

この記事で最もエキサイティングな部分だと思います。次のメジャーアップデートである Nightwatch v2 の作業は既に進行中で、今年の秋までにパブリック NPM チャンネルで公開される予定です。アルファ版は 8 月に公開されます。

Node.js の公式 Selenium Webdriver バインディングを使用するようにトランスポート層を完全に作り直しています。これにより、よりシームレスなブラウザ統合、より信頼性の高い DOM 要素処理、そして全体的により安定した高速なテストが可能になります。Nightwatch v1.x は引き続きサポートされ、重大な問題については定期的にパッチアップデートを発行します。また、Nightwatch v1.5 以降から v2 へのアップグレードをできるだけスムーズに行い、大きな破壊的変更を導入しないように努めます。

v2 の魅力的な新機能をいくつかご紹介します

• アクション API のサポート

アクション API は、複雑なユーザー操作を生成するためのより信頼性の高い方法を提供し、Nightwatch の組み込み機能となります (既存の .perform() コマンドを介して)。

• 自動コマンドリトライの拡張

現在のバージョンでは、Nightwatch は失敗した要素取得操作のリトライのみをサポートしていますが、v2 では失敗した要素コマンド (クリックが element click intercepted などのエラーに遭遇した場合など) もリトライします。

• 新しい相対要素ロケーター

新しい Selenium 4 相対ロケーター は、Nightwatch でデフォルトで使用できるようになります。また、Selenium の By() API を介して既存のロケーターも改善されます。

• ファイルアップロードの操作に対する組み込みサポート

現在、Nightwatch でファイルをアップロードするのは面倒ですが、v2 では FileDetector API と連携する組み込みコマンドを追加します。

• 拡張機能オブジェクトのサポート

機能を定義する主な方法は、引き続き nightwatch.conf.js 設定ファイルの一部としてですが、v2 では、Selenium の Capabilities API で作成されたすべての機能オブジェクトもデフォルトでサポートされます。

• Chrome でのネットワーク条件の設定

ネットワーク条件の操作は、ブラウザの自動化で作業する際に定期的に必要となる機能であり、v2 では Chrome と Edge で最初にサポートできるようになります。

• Devtools プロトコルのサポート

Chrome DevTools プロトコル を使用すると、Chrome や Edge などの Chromium ベースのブラウザをツールで計測、検査、デバッグ、プロファイリングできます。この機能を Nightwatch v2 に追加します。

• Webdriver BiDi 対応

新しい 双方向 WebDriver プロトコル は、Selenium プロジェクトにおける最近の最もエキサイティングな開発の 1 つであり、期待をはるかに上回る速度と安定性の向上が期待されます。利用可能になり次第、Nightwatch にも組み込まれる予定です。Selenium の Web サイト で開発状況を確認できます。

• さまざまな新しいコマンド API

Nightwatch v2 には、Selenium until API をミラーリングする新しい .ensure アサーション API、グローバル element()expect()by()browser オブジェクトが導入され、テスト 작성エクスペリエンスが向上し、柔軟性が向上します。

• テストランナーの改善

Nightwatch v2 では、失敗したテストのみを再実行する機能や、並列テスト実行のサポートの向上など、テストランナーにもいくつかの改善が加えられます。

上記のリストは網羅的なものではなく、バージョン 2 の初期パブリック リリースまで変更される可能性があります。見逃しているものがある場合は、Nightwatch v1.7 で公開されているアップデートもご確認ください。

ご意見をお聞かせください

Appium や Playwright などの他のツールとの統合、その他の新機能、API についても検討しています。この簡単なアンケート にご協力いただき、新しいバージョンで使用している機能や、今後追加してほしい機能についてお聞かせください。チームと共有していただければ幸いです。

最後までお読みいただきありがとうございました。Github で プロジェクトにスターを付ける ことと、Twitter で @nightwatchjs をフォローすることを忘れないでください。

(Twitter、Facebook、コピーリンクボタンの日本語訳は省略)