問題:私たちのかなり大きなテストコードベースで使用してクロスプラットフォームのキーボードショートカットは
、我々は異なるキーボードショートカットを使用しています。たとえば、私たちはCTRL/COMMAND + C
を使用している選択したテキストをコピーするには、CTRL/COMMAND + T
など新しいタブを開くには
テストは複数のプラットフォームで動作し続けるために、CTRL/COMMAND + v
を貼り付けるために、は、我々は応じてCTRL
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()
は約束を返すと、我々はそれを使用するたびに、私たちは約束を解決しなければならないということです明示的に:
helpers.getControlKey().then(function (controlKey) {
elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});
質問(複数可):それはposは
です入れ子を避けて
getControlKey()
の使用を単純化するにはどうすればいいですか?理想的には私はそれと同じくらい簡単に動作たい:elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));
ターゲットプラットフォームを決定する
navigator.appVersion
最善のアプローチを使用して、より良い方法はありますか。
protractorがNode.js envで動作するので、私はあなたが['os.platform()'](https://nodejs.org/api/os)を使うことができると思います。html#os_os_platform)、これは同期呼び出しです(テストはブラウザで同じマシン上で実行されていることを前提としています)。 –
@MichaelRadionov問題は、テストが実行されるマシンがブラウザが起動されるマシンと同じであるとは想定できません。ありがとう。 – alecxe
これはクリーンな解決策ではありませんが、 'onPrepare'で' navigator'ルックアップを一回行い、そこで定数/ヘルパーを定義することができます。それは約束を回避する必要性を避けるでしょう。 –