APIコマンド
Nightwatchは、基本的なWebDriverプロトコルマッピングと、テスト 작성のためのよりスムーズで便利な構文を保証するための様々な複合コマンドを提供します。
- 複合コマンド -
getValue
やisVisible
などは、通常、2つ以上の WebDriver プロトコルコマンドを組み込んでいます。 - プロトコルコマンド - ほとんどの場合、W3C WebDriver プロトコル、または場合によっては、その前身である Selenium JsonWireProtocol プロトコルへの単純なマッピングです。
その中には、基本的なコマンド (url
や execute
など) と、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プロトコルの使用
ChromeDriver と EdgeDriver はどちらも、それぞれのブラウザと連携するための特定のコマンドを公開しています。
ChromeDriver または EdgeDriver を使用している場合、Chrome DevTools プロトコル 経由でコマンドを実行できるようになりました。
browser
オブジェクトの chrome
名前空間で利用可能なコマンドの完全なリストを以下に示します。
browser.chrome
- .launchApp()
- .getNetworkConditions()
- .setNetworkConditions()
- .sendDevToolsCommand()
- .sendAndGetDevToolsCommand()
- .setPermission()
- .setDownloadPath()
- .getCastSinks()
- .setCastSinkToUse()
- .startCastTabMirroring()
- .getCastIssueMessage()
- .stopCasting()
詳細情報
例
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 拡張機能のインストール
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;
}
}
}
};