APIコマンド

Nightwatchは、基本的なWebDriverプロトコルマッピングと、テスト 작성のためのよりスムーズで便利な構文を保証するための様々な複合コマンドを提供します。

  • 複合コマンド - getValueisVisible などは、通常、2つ以上の WebDriver プロトコルコマンドを組み込んでいます。
  • プロトコルコマンド - ほとんどの場合、W3C WebDriver プロトコル、または場合によっては、その前身である Selenium JsonWireProtocol プロトコルへの単純なマッピングです。

その中には、基本的なコマンド (urlexecute など) と、Nightwatch のコマンドやアサーションで使用される内部コマンドがあります。

コールバック関数

以下の各メソッドでは、最後の引数として callback 引数を渡すことができます。 コールバック関数は、コマンドが完了した後、メイン API (browser) をコンテキストとして、レスポンスオブジェクトを引数として呼び出されます。


this.demoTest = function (browser) {
  browser.click("#main ul li a.first", function(result) {
    this.assert.ok(browser === this);
    this.assert.ok(typeof result == "object");
  });
};

コールバック内のPromise

コールバックが Promise を返す場合、テストランナーは Promise が解決または拒否されるまで待機してから、残りのコマンドを続行します。


module.exports = {
  demoTest: function (browser) {
    browser
      .init()
      .getText("#main ul li", function(result) {
        return new Promise(function(resolve, reject) {
          setTimeout(function() {
            console.log('Value:', result.value);
            resolve();
          }, 1000);
        });
      })
      .click('#login button');
  },
  
demoTestAsync: async function(browser) { const text = await browser.init().getText("#main ul li", function(result) { return Promise.resolve(result.value); });
console.log('The text is', text); } };

Chrome DevToolsプロトコルの使用

ChromeDriverEdgeDriver はどちらも、それぞれのブラウザと連携するための特定のコマンドを公開しています。

ChromeDriver または EdgeDriver を使用している場合、Chrome DevTools プロトコル 経由でコマンドを実行できるようになりました。

browser オブジェクトの chrome 名前空間で利用可能なコマンドの完全なリストを以下に示します。

browser.chrome

詳細情報

describe('Chrome DevTools Example', function() {
  
it ('using CDP DOM Snapshot', async function() { const dom = await browser.chrome.sendAndGetDevToolsCommand('DOMSnapshot.captureSnapshot', { computedStyles: [] });
console.log('DOM', dom) }) });

Firefox 特有のコマンド

FirefoxDriver は、「特権」のある JavaScript コードを実行するためのコンテキストを設定したり、アドオンを操作したりするための特定のコマンドを公開しています。 これらは現在、Nightwatch で firefox 名前空間で直接利用できます。

browser.firefox

詳細情報

Firefox プロファイルのカスタマイズ

Firefox WebDriver インスタンスは匿名プロファイルで作成され、ブラウザの履歴がセッションデータ (Cookie、履歴、キャッシュ、オフラインストレージなど) を共有しないようにします。

各 WebDriver セッションに使用されるプロファイルは、Selenium の Options クラスを使用して設定できます。 Nightwatch 2 は、selenium-webdriver ライブラリで作成されたオプションオブジェクトを完全にサポートしています。

既存の Firefox プロファイルは変更されません。 代わりに、WebDriver は変更するためにコピーを作成します。 WebDriver が正しく機能するには、特定のブラウザ設定が必要であり、常に上書きされます。

Firefox 拡張機能のインストール

Firebug と呼ばれる拡張機能をインストールする必要があるとします。 nightwatch.conf.js では、Options クラスを使用して、次のように WebDriver セッションを設定できます。

const firefox = require('selenium-webdriver/firefox');

const options = new firefox.Options() .addExtensions('../../../path/to/firebug.xpi') .setPreference('extensions.firebug.showChromeErrors', true);
module.exports = { src_folders: ['tests'], test_settings: { default: { browserName: 'firefox', desiredCapabilities: options } } };

または関数として

module.exports = {
  src_folders: ['tests'],
  test_settings: {
    default: {
      browserName: 'firefox',
      desiredCapabilities() {
        const firefox = require('selenium-webdriver/firefox');
        
const options = new firefox.Options() .addExtensions('../../../path/to/firebug.xpi') .setPreference('extensions.firebug.showChromeErrors', true);
return options; } } } };