ついにNightwatch v2.0の最初のベータ版をリリースしました。今後のベータ版は、NPMのnextタグで段階的に公開されます。インストールするには、以下のコマンドを実行してください。
npm i nightwatch@next
今後数週間で、ガイドセクションにさらにページを追加し、新しいAPIのドキュメントを追加して、ドキュメントの更新を完了する予定です。
新機能
前回のアルファ版からの重要な変更点については、リリースノートをご覧ください。
また、最初のアルファ版リリースを発表したブログ記事を再確認することで、新機能と機能強化の一覧をより深く理解することができます。ここでは、最も重要なものを簡単にまとめておきます。
新しいユーザーアクションAPI、Chrome DevTools Protocolのサポート、WebDriver BiDi
v2の主な変更点の1つは、ブラウザドライバとの通信に公式のselenium-webdriverライブラリを使用するように、基盤となるアーキテクチャが完全に作り直されたことです。
これは、クロスブラウザの統合が改善され、DOM要素の処理がより信頼できるようになることを意味します。これに関する変更点の詳細は、アルファ版に関する以前のブログ記事をご覧ください。
NightwatchでCucumberJSを使用するための新しい統合テストランナー
前回のv2.0.0-alpha.3では、CucumberJS用の新しい統合テストランナーと、Mocha v9に基づくアップグレードされたMochaテストランナーを発表しました。このバージョンにおけるもう1つの注目すべきアップデートは、新しいプログラムAPIです。
Nightwatch 2でCucumberJsを使用する場合、Cucumberライブラリ自体(バージョン7.3以降)以外に、他のプラグインは必要ありません。Nightwatch 2でCucumberJsを使用する方法の詳細と例は、バンドルされているexamplesフォルダにあります。
これらの例は、新しいプロジェクトですぐに試すことができます。自動生成されたNightwatch設定ファイルには、必要な設定が含まれています。
npx nightwatch --env cucumber-js
詳細はv2.0.0-alpha.3をご覧ください。
例
バンドルされている例も更新しましたので、新しいNightwatch 2の機能をよく理解するために、必ず確認してください。
AngularJSのホームページで利用可能なサンプルのto-doアプリを使用する例を次に示します。
describe('angularjs homepage todo list', function() {
// using the new element() global utility in Nightwatch 2 to init elements
// before tests and use them later
const todoElement = element('[ng-model="todoList.todoText"]');
const addButtonEl = element('[value="add"]');
it('should add a todo using global element()', function() {
// adding a new task to the list
browser
.navigateTo('https://angularjs.org')
.sendKeys(todoElement, 'what is nightwatch?')
.click(addButtonEl);
// verifying if there are 3 tasks in the list
expect.elements('[ng-repeat="todo in todoList.todos"]').count.to.equal(3);
// verifying if the third task if the one we have just added
const lastElementTask = element({
selector: '[ng-repeat="todo in todoList.todos"]',
index: 2
});
expect(lastElementTask).text.to.equal('what is nightwatch?');
// find our task in the list and mark it as done
lastElementTask.findElement('input', function(inputResult) {
if (inputResult.error) {
throw inputResult.error;
}
const inputElement = element(inputResult.value);
browser.click(inputElement);
});
// verify if there are 2 tasks which are marked as done in the list
expect.elements('*[module=todoApp] li .done-true').count.to.equal(2);
});
});
フィードバックをお寄せください
ベータ版の詳細については、v2.0.0-beta.1リリースノートをご覧ください。 Github Issuesでバグを報告するか、Discussionsページで一般的なフィードバックをお寄せください。ご協力ありがとうございます!