Das Problem:Verwendung plattformübergreifende Tastaturkürzel in End-to-End-Tests
In unserer ziemlich großen Test Code-Basis, verwenden wir verschiedene Tastenkombinationen. Zum Beispiel ausgewählten Text kopieren wir CTRL/COMMAND + C
, verwenden CTRL/COMMAND + v
einfügen, um einen neuen Tab zu öffnen CTRL/COMMAND + T
usw.
Tests zu halten auf mehreren Plattformen arbeiten, wir möchten, dass die CTRL
vs COMMAND
Wahl automatischen machen abhängig Auf welcher Plattform läuft der Zielbrowser unter. Um eine Zielplattform zu bestimmen, werden wir zur Zeit mit der folgenden Hilfsfunktion, die verwendet navigator.appVersion
:
this.getControlKey = function() {
return browser.executeScript("return navigator.appVersion.indexOf('Mac');").then(function (isMac) {
return isMac ? protractor.Key.COMMAND : protractor.Key.CONTROL;
});
};
Das Problem bei diesem Ansatz ist, dass getControlKey()
gibt ein Versprechen, und jedes Mal, wenn wir es verwenden, haben wir das Versprechen lösen ausdrücklich:
helpers.getControlKey().then(function (controlKey) {
elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});
Die Frage (n):
Ist es po um die Verschachtelung zu vermeiden und die Verwendung von
getControlKey()
zu vereinfachen? Idealerweise würde ich es so einfach wie gerne arbeiten:elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));
Nutzen
navigator.appVersion
der beste Ansatz eine Zielplattform zu bestimmen, und gibt es einen besseren Weg?
Da der Winkelmesser in Node.js env läuft denke ich, dass Sie ['os.platform()'] (https://nodejs.org/api/os.html # os_os_platform), was ein synchroner Aufruf ist (vorausgesetzt, dass Tests auf demselben Rechner mit dem Browser ausgeführt werden). –
@MichaelRadionov das Problem ist, können wir nicht davon ausgehen, dass die Maschine, auf der die Tests ausgeführt werden, dieselbe Maschine ist, auf der der Browser gestartet wird. Vielen Dank. – alecxe
Dies ist keine saubere Lösung, aber Sie könnten einfach Ihre 'Navigator'-Suche in' onPrepare' durchführen und dort eine Konstante/Helfer definieren. Das würde die Notwendigkeit vermeiden, ein Versprechen zu bestehen. –