à l'aide de la sauce et du rapporteur de tester internet explorer et safari
-
26-12-2019 - |
Question
J'ai les tests suivants, qui fonctionnent très bien quand je le lance en local et de la sauce (au moins la plupart du temps) à l'aide de firefox et de 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);
});
});
});
Mais quand je lance internet explorer ou safari, je reçois toutes sortes d'erreurs, tandis que la page fonctionne très bien lorsqu'il est testé manuellement.Pour IE je reçois:
Message:UnknownError:Erreur JavaScript (ATTENTION:Le serveur n'a pas de fournir tout stacktrace de l'information) de Commande de la durée ou de l'expiration:97 millisecondes Construire info:version:'2.30.0', de la révision:'dc1ef9c', temps:'2013-02-19 00:15:27' des infos sur le Système:os.nom:"Windows Server 2008 R2', os.arch:'x86', os.version:'6.1', java.version:'1.6.0_35 de la Session ID:42b30348-8598-4edb-923e-a7019ced6eb0 Pilote d'info:org.openqa.le sélénium.c'est à dire.InternetExplorerDriver Capacités [{=plate-forme WINDOWS, elementScrollBehavior=0, javascriptEnabled=true, enablePersistentHover=true, ignoreZoomSetting=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=rejeter, version=10, cssSelectorsEnabled=true, ignoreProtectedModeSettings=false, requireWindowFocus=false, allowAsynchronousJavaScript=false, handlesAlerts=true, initialBrowserUrl=, nativeEvents=true, takesScreenshot=true}]
Erreur:Erreur lors de l'attente pour le Rapporteur pour la synchronisation avec la page:{"pile":"TypeError:Impossible d'obtenir la propriété 'get' undefined ou référence null à la fonction Anonyme (Inconnu le code du script:25:5) à la fonction Anonyme (Inconnu code de script:21:14) at Anonyme fonction (Inconnue code de script:21:2)","description":"Impossible d'obtenir la propriété 'get' undefined ou référence null","nombre":-2146823281}
Et pour Safari:
UnknownError:Détecté une page événement de déchargement;l'exécution du script ne fonctionne pas sur le chargement de la page.(AVERTISSEMENT:Le serveur n'a pas de fournir tout stacktrace de l'information) Commande de la durée ou de l'expiration:384 millisecondes Construire info:version:'2.33.0', de la révision:'4e90c97', temps:'2013-05-22 15:32:38' Système d'information:os.nom:"Windows Server 2008 R2', os.arch:'x86', os.version:'6.1', java.version:'1.6.0_35' ID de Session:null Pilote d'info:org.openqa.le sélénium.safari.SafariDriver Capacités [{=plate-forme WINDOWS, javascriptEnabled=true, cssSelectorsEnabled=true, secureSsl=true, browserName=safari, takesScreenshot=vrai, version=5.1.7}]
Je suis confsued sur les raisons.J'ai essayé de simplifier les tests avec les mêmes résultats, j'ai essayé en local et à distance url et j'ai essayé toutes sortes de retards comme waitForAngular
, wait
et ptor ignoreAsynch = true
.Aucun d'entre eux conduire au résultat désiré.Toutes les suggestions?
Mon rapporteur fichier de config:
// 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
}
};
Bien qu'il ne semble pas important, je utiliser grunt-rapporteur coureur d'exécuter plusieurs instances de manière séquentielle.
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'
]);
La solution
Hugo, C'est un problème avec certaines configurations de test qui a été partiellement résolu le Rapporteur 0,17 et plus définitivement résolue dans de 0,18.Je voudrais vous recommandons de mettre à jour votre rapporteur pour plus tard0.18.1 au moment de ce post) et voir si cela résout votre problème.
Pertinentes entrées de journal des modifications:
v0.18
(10aec0f) fixe(pageload):augmenter le délai d'attente
Les 300 ms attendre causé des problèmes lors de l'essai à-dire sur la Sauce Labs.Il semble trop court."du navigateur.get()" invariablement expiré.En augmentant résoudre notre problème.
v0.17
(a0bd84b) fixe(pageload):ajouter un temps d'attente pendant le rapporteur.get() pour résoudre décharger les questions
Certains systèmes ne voulait pas attendre pour le navigateur événement unload à terminer avant le début de l'asynchrone de l'exécution du script.
Ferme #406.Ferme #85.
Espérons que ça aide!