問題:
かなり大きなテストコードベースでは、さまざまなキーボードショートカットを使用しています。たとえば、使用している選択したテキストをコピーしCTRL/COMMAND + C
たり、貼り付けCTRL/COMMAND + v
たり、新しいタブを開いたりしますCTRL/COMMAND + T
。
複数のプラットフォームでテストを機能させるために、ターゲットブラウザが実行されているプラットフォームに応じてCTRL
vsのCOMMAND
選択を自動化します。ターゲットプラットフォームを決定するために、現在、以下を使用するヘルパー関数を使用していますnavigator.appVersion
。
this.getControlKey = function () {
return browser.executeScript("return navigator.appVersion.indexOf('Mac');").then(function (isMac) {
return isMac ? protractor.Key.COMMAND : protractor.Key.CONTROL;
});
};
このアプローチの問題getControlKey()
は、promiseを返すことであり、それを使用するたびに、promiseを明示的に解決する必要があります。
helpers.getControlKey().then(function (controlKey) {
elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});
質問):
ネストを回避し、使用を簡素化することは可能getControlKey()
ですか?理想的には、次のように簡単に機能させたいと思います。
elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));
navigator.appVersion
ターゲットプラットフォームを決定するために最良のアプローチを使用していますか?より良い方法はありますか?
2つのシナリオについて、最初の質問に答えるのが最善です-
複数のテスターが自分のマシンでスクリプトを実行する場合、ヘルパーメソッドをonPrepare()
関数に配置して、すべてのテストで使用できる定数グローバル変数に値を割り当てることができます。
すべてのテストが分散プラットフォームで実行され、すべてのテストが異なるマシンにランダムに割り当てられる場合、その場合、beforeAll()
関数内のそのテストの定数ローカル変数に値を割り当てるヘルパーメソッドを作成すると便利です。
2番目の質問に移ると、分度器のgetCapabilities()
方法を使用してテスト仕様が実行されているプラットフォームを取得する別の方法もあります。
プラットフォームタイプを取得するためのコード-
//Below code can be placed either in `onPrepare()` function or `beforeAll()` function depending the need.
//If the below code is placed in the `beforeAll()` function then i guess there won't be any need for a global variable.
browser.controlKey = protractor.Key.CONTROL; //browser.controlKey is a global variable and can be accessed anywhere in the test specs
browser.getCapabilities().then(function(capabilities){
if(capabilities.caps_.platform === "MAC")
browser.controlKey = protractor.Key.COMMAND;
});
使用法:
elm.sendKeys(protractor.Key.chord(browser.controlKey, "c")); //if its stored as global variable
それが役に立てば幸い。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加