ページ固有のコマンドを書く

概要

commands プロパティを使用して、ページオブジェクトにカスタムコマンドを追加できます。これは、テストまたは複数のテストに存在するページに関するロジックをカプセル化する便利な方法です。

Nightwatch は、ページまたはセクションのコンテキストでコマンドを呼び出します。 pause などのクライアントコマンドは、this.api を介して使用できます。チェーン化のために、各関数はページオブジェクトまたはセクションを返す必要があります。

この場合、送信ボタンをクリックするためのロジックをカプセル化するためにコマンドが使用されます

nightwatch/pages/samplePage.js
const googleCommands = {
  submit: function() {
    this.api.pause(1000);
    
return this.waitForElementVisible('@submitButton', 1000) .click('@submitButton') .waitForElementNotPresent('@submitButton'); } };
module.exports = { commands: [googleCommands], elements: { searchBar: { selector: 'input[type=text]' }, submitButton: { selector: 'input[name=btnK]' } } };

そして、テストは単純に
module.exports = {
  'Test': function (browser) {
    var google = browser.page.google();
    google.setValue('@searchBar', 'nightwatch')
      .submit();
    
browser.end(); } };

クラスベースのページコマンド

Nightwatch 2からは、ページコマンドをES6クラスとしてエクスポートすることもできます。

基本的な例を次に示します

nightwatch/pages/commands/basicCommands.js
module.exports = class {
  basicCommand() {
    return {
      basicResult: 'from-helper-class'
    };
  }
  
dropdownSelect() { return this; }
dropdownSelectByText() { return this; }
name() { return this; } };

そして、より詳細な例... メインページオブジェクトは this.page を介して参照できます。クラスは自動的にインスタンス化されるため、記述する以外に何もする必要はありません

nightwatch/pages/realcommands.js
module.exports = class RealCommands {
  customFindElements(selector, callback = function(r) {return r}) {
    return this.page.findElements({
      selector,
      suppressNotFoundErrors: true
    }, function(result) {
      return callback(result ? result.value: []);
    });
  }
  
async customFindElementsES6(selector) { const result = await this.page.findElements({ selector, suppressNotFoundErrors: true });
return result; } };