Usando salsa e goniometro per testare Internet Explorer e Safari
-
26-12-2019 - |
Domanda
Ho i seguenti test, che corrono bene quando li corrono localmente e sulla salsa (almeno la maggior parte del tempo) usando Firefox e Chrome.
ptor = protractor.getInstance();
baseUrl = protractor.getInstance().params.sBaseUrl;
aRequiredTextFieldsKeys = [
'sFirstName',
'sLastName',
'sStreet',
'sZip',
'sCity'
];
describe('form', function ()
{
var sFormUrl = baseUrl + '#/form';
beforeEach(function ()
{
ptor.get(sFormUrl);
});
describe('wholeForm', function ()
{
it('fully filled form => required fields have correct class && submit leads to other route', function ()
{
function checkRequiredClass(el)
{
expect(el.getAttribute('class')).toContain('ng-valid-required');
}
// requried text-fields
for (var i = 0; i < aRequiredTextFieldsKeys.length; i++) {
var el = element(by.model('oFormData.' + aRequiredTextFieldsKeys[i]));
el.sendKeys('a');
checkRequiredClass(el);
}
// email
var elEmail = element(by.model('oFormData.sEmail'));
elEmail.sendKeys('jo@jo.de');
checkRequiredClass(el);
// birthday
var elBirthday = element(by.model('oFormData.oBirthday'));
elBirthday.sendKeys('1.1.1995');
checkRequiredClass(el);
// checkboxes
var elCheck1 = element(by.model('oFormData.bAgb'));
elCheck1.click();
checkRequiredClass(elCheck1);
var elCheck2 = element(by.model('oFormData.bPrivatePolicy'));
elCheck2.click();
checkRequiredClass(elCheck2);
// hack upload bon
ptor.executeScript(function ()
{
var scope = $('#application-form-id').scope();
scope.oFormData.bBonUploaded = true;
});
// submit form
element(by.className('btn-submit')).click();
ptor.getCurrentUrl()
.then(function (url)
{
expect(url).toNotBe(sFormUrl);
});
});
});
.
Ma quando lancio Internet Explorer o Safari, ottengo tutti i tipi di errori, mentre la pagina funziona bene quando viene testata manualmente. Perché Ie ottengo:
.Messaggio: UnknownError: Errore JavaScript (Attenzione: il server non ha fornito alcuna informazioni di stacktrace) Durata del comando o Timeout: 97 Milliseconds Build Info: Versione: '2.30.0', revisione: 'DC1EF9C', TEMPO: '2013-02-19 00:15:27' Info del sistema: OS.NAME: 'Windows Server 2008 R2', os.arch: 'x86', os.version: '6.1', Java.Version: '1.6.0_35' Session ID: 42B30348-8598-4EDB-923E-A7019EDB-923E-A7019CEDE6EB0 Informazioni driver: org.openqa.selenium.ie.internetexplorerDriver Capamente [{piattaforma= windows, elementcrollbehavior= 0, javasptenthead= true, EnablePerSistHover= True, IgnoreZoomSetting= False, BrowserName= Internet Explorer, EnableelementCacheCleanUp= TRUE, inaspettatoAlertbehaviour= resping, versione= 10, CSSELETTORSENACESSE= TRUE, IGNOREPROTECTUONIMODESETTISETTI= FALSE, RequirewinDowFocus= False, AllowAsynchronousjavaScript= falso, HandlsAlerts= True, InagnalBrowserurl=, NatureAvents= TRUE, takesscreenshot= true}]
Errore: errore durante l'attesa del protractor di sincronizzazione con la pagina: {"Stack": "TypeError: Impossibile ottenere la proprietà 'Get' di riferimento indefinito o nullo \na funzione anonima (sconosciuta Codice script: 25: 5) \na funzione anonima (codice script sconosciuto: 21: 14) \nad anonimo Funzione (codice di script sconosciuto: 21: 2) "," Descrizione ":" Impossibile ottenere la proprietà 'Get' di indefinito o riferimento NULL "," Numero ": - 2146823281}
e per safari:
.UnknownError: rilevato un evento di scarico della pagina; L'esecuzione dello script non funziona attraverso i carichi di pagina. (Avvertenza: il server non ha fornito alcuna informazione di stacktrace) Durata del comando o Timeout: 384 millisecondi Informazioni sulla costruzione: versione: '2.33.0', revisione: '4E90C97', TEMPO: '2013-05-22 15:32:38' INFO SYSTEM: OS.NAME: 'Windows Server 2008 R2', OS.ARCH: 'X86', OS.VERSION: '6.1', JAVA.Version: '1.6.0_35' ID sessione: NULL Informazioni sul conducente: org.openqa.selenium.safari.safaridriver Funzionalità [{piattaforma= Windows, JavaScriptenabled= True, CSSSectorsENAbled= True, SecuressL= TRUE, BROWSERNAME= Safari, TakessCreenShot= True, Versione= 5.1.7}]
Sono confuso sulle ragioni. Ho provato test più semplici con gli stessi risultati, ho provato URL locali e remoti e ho provato tutti i tipi di ritardi come waitForAngular
, wait
e ptor ignoreAsynch = true
. Nessuno di loro porta al risultato desiderato. Qualche suggerimento?
Il mio file di configurazione del protractor:
// A reference configuration file.
exports.config = {
seleniumServerJar: null,
seleniumPort: null,
chromeOnly: false,
// Additional command line options to pass to selenium. For example,
// if you need to change the browser timeout, use
// seleniumArgs: ['-browserTimeout=60'],
seleniumArgs: [],
sauceUser: 'saucesuer',
sauceKey: 'key',
allScriptsTimeout: 120000,
specs: [
'test/e2e/**/*.js',
],
// https://code.google.com/p/selenium/wiki/DesiredCapabilities
// https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
capabilities: {
'browserName': 'phantomjs',
'phantomjs.binary.path':'node_modules/phantomjs/bin/phantomjs'
},
// Selector for the element housing the angular app - this defaults to
// body, but is necessary if ng-app is on a descendant of <body>
rootElement: 'body',
onPrepare: function ()
{
// driver.manage().timeouts().setScriptTimeout(60000);
},
params: {
sBaseUrl: 'https://dev.com/'
},
baseUrl: 'http://localhost:8000',
framework: 'jasmine',
// ----- Options to be passed to minijasminenode -----
//
// See the full list at https://github.com/juliemr/minijasminenode
jasmineNodeOpts: {
// onComplete will be called just before the driver quits.
onComplete: null,
// If true, display spec names.
isVerbose: true,
// If true, print colors to the terminal.
showColors: true,
// If true, include stack traces in failures.
includeStackTrace: true,
// Default time to wait in ms before a test fails.
defaultTimeoutInterval: 120000
}
};
.
Mentre non sembra importante, utilizzo Grunt-Grottractor Runner per eseguire più istanze sequenzialmente.
chrome: {
options: {
args: {
browser: 'chrome',
"idle-timeout": 120
}
}
},
firefox: {
options: {
args: {
browser: 'firefox'
}
}
},
ie9: {
options: {
args: {
browser: 'internet explorer',
version: '9',
"idle-timeout": 120
}
}
},
ie10: {
options: {
args: {
browser: 'internet explorer',
version: '10'
}
}
},
safari7: {
options: {
args: {
browser: 'safari',
version: '7'
}
}
},
safari6: {
options: {
args: {
browser: 'safari',
version: '6'
}
}
},
safari5: {
options: {
args: {
browser: 'safari',
version: '5'
}
}
}
}
grunt.registerTask('e2eall', [
'protractor:ie9',
'protractor:ie10',
'protractor:safari5',
'protractor:safari6',
'protractor:safari7',
'protractor:firefox',
'protractor:chrome'
]);
. Soluzione
hugo, Questo è un problema con alcune configurazioni di test che è stata parzialmente risolta in GOTTRACTOR 0.17 e più definitivamente risolto in 0,18.Consiglierei di aggiornare il tuo goniometro all'ultimo ( 0.18.1 al momento di questo post) e vedendo se risolve il tuo problema.
Voci di Changelog pertinenti:
v0.18
.(10AEC0F) Fix (Pageload): Aumentare Timeout di attesa
L'attesa 300 ms ha causato problemi durante il test cioè sui laboratori di salsa.Sembra troppo breve."Browser.get ()" invariabilmente scaduto.Aumentandolo ha risolto il nostro problema.
v0.17
.(A0BD84b) Fix (Pageload): aggiungere un attesa durante il protractor.get () per risolvere i problemi di scarico
Alcuni sistemi non dovrebbero aspettare che il browser scarica l'evento per finire prima di iniziare l'esecuzione di script asincrona.
Chiude # 406.Chiude # 85.
Spero che ti aiuti!