Il problema:utilizzando le scorciatoie da tastiera cross-platform nei test end-to-end
Nel nostro piuttosto grande base di codice di test, stiamo usando diverse scorciatoie da tastiera. Per esempio, per copiare il testo selezionato stiamo usando CTRL/COMMAND + C
, per incollare CTRL/COMMAND + v
, per aprire una nuova scheda CTRL/COMMAND + T
ecc
Per mantenere prove di lavoro su più piattaforme, vorremmo rendere il CTRL
vs COMMAND
scelta automatica a seconda su quale piattaforma è in esecuzione il browser di destinazione su. Per determinare una piattaforma di destinazione, stiamo attualmente utilizzando la seguente funzione di supporto che utilizza navigator.appVersion
:
this.getControlKey = function() {
return browser.executeScript("return navigator.appVersion.indexOf('Mac');").then(function (isMac) {
return isMac ? protractor.Key.COMMAND : protractor.Key.CONTROL;
});
};
Il problema di questo approccio è che getControlKey()
restituisce una promessa e, ogni volta che lo usiamo, dobbiamo risolvere la promessa esplicitamente:
helpers.getControlKey().then(function (controlKey) {
elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});
The Question (s):
E 'pos è possibile evitare la nidificazione e semplificare l'uso di
getControlKey()
? Idealmente mi piacerebbe farlo funzionare così semplice come:elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));
Sta usando
navigator.appVersion
l'approccio migliore per determinare una piattaforma di destinazione, e c'è un modo migliore?
Come il goniometro viene eseguito in Node.js env, penso che sia possibile utilizzare ['os.platform()'] (https://nodejs.org/api/os.html # os_os_platform), che è una chiamata sincrona (presupponendo che i test vengano eseguiti sulla stessa macchina con il browser). –
@MichaelRadionov il problema è che non possiamo assumere che la macchina su cui vengono eseguiti i test sia la stessa macchina su cui è stato avviato il browser. Grazie. – alecxe
Questa non è una soluzione pulita, ma si può semplicemente eseguire la ricerca 'navigator' in' onPrepare' una volta e definire una costante/aiuto lì. Ciò eviterebbe la necessità di far passare una promessa. –