我运行一个启动2个规格的conf.js。这些规范中的每一个都有自己的基本URL。在第二个规范中,第一个测试用例失败,因为测试不等待Protractor。我收到这个错误:
Expected 'Hello {{yourName}}!' to equal 'Hello Robert!'.
当我修改conf.js以便只运行失败的规范时,一切都运行正常。量角器在第二个规格的第一个测试用例中等待Angular。
注意:在我的规范中,我运行这个命令,我认为它可能是我需要修改以解决这个问题的那个:
beforeEach(function () {
browser.get(browser.baseUrl);
});
关于如何解决问题的任何想法?
编辑:按照建议,这是我的conf:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['../specs/*.js'],
baseUrl: 'https://angularjs.org',
framework: 'jasmine'
};
第一个测试规范,运行正常:
var donnees = require('../test-data/jeu-de-donnees-demo.js');
var using = require('jasmine-data-provider');
describe("Création d'utilisateur", function() {
beforeEach(function () {
browser.get("http://localhost:3000");
});
using(donnees.prenoms, function (data, description) {
it("Type de données : " + description, function () {
var input_prenom = element(by.xpath("//input[@name='name']"));
var input_nom = element(by.xpath("//input[@name='username']"));
var bouton_valider = element(by.xpath("//button[contains(., 'Créer')]"));
var nombre_lignes_avant = 0;
input_prenom.sendKeys(data.prenom);
input_nom.sendKeys(data.nom);
var rows = element.all(by.xpath("//ul[contains(@class, 'users-list')]/li"));
rows.count().then(function(count){
nombre_lignes_avant = count;
bouton_valider.click();
var nombre_lignes_apres = nombre_lignes_avant + 1;
var nouvelle_ligne = element(by.xpath("//ul[contains(@class, 'users-list')]/li[" + nombre_lignes_apres + "]"));
expect(nouvelle_ligne.getText()).toEqual(data.prenom + " " + data.nom);
});
});
});
});
第二个,第一个测试用例失败:
var donnees = require('../test-data/jeu-de-donnees-demo.js');
var using = require('jasmine-data-provider');
var SiteAngularPageAccueil = require('../pages/site-angular-page-accueil.js');
describe("Suite de test de la feature qui dit bonjour", function() {
var pageAccueil = new SiteAngularPageAccueil();
beforeEach(function () {
browser.get(browser.baseUrl);
});
using(donnees.prenoms, function (data, description) {
it("Chaîne de type " + description, function () {
testMessageSalutations(data.prenom);
});
});
function testMessageSalutations(prenomSaisi, prenomVoulu){
pageAccueil.entrerPrenom(prenomSaisi);
var prenomAVerifier = (prenomVoulu ? prenomVoulu : prenomSaisi);
expect(pageAccueil.message_salutations.getText()).toEqual('Hello ' + prenomAVerifier + '!');
}
});
测试数据文件......
'use strict';
module.exports = {
prenoms: {
'ASCII': { prenom: 'aaa', nom: "eee" },
'Caractères spéciaux français': { prenom: 'ààà', nom: "ééé" },
'Caractères spéciaux arabes': { prenom: 'صباح الخير', nom: 'صباح الخير'},
'Caractères spéciaux chinois': { prenom: '安', nom: '安' },
'Script': { prenom: "<script type='text/javascript'>alert('Hoo la laaa');</script>", nom: "<img src='../' onerror=alert('Lolilolz')/>" }
},
}
最后,第二个规范中使用的页面对象:
var SiteAngularPageAccueil = function() {
this.champ_nom = element(by.model('yourName'));
this.message_salutations = element(by.xpath("//div[contains(@class, 'well')]//h1"));
this.entrerPrenom = function(prenom) {
this.champ_nom.sendKeys(prenom);
};
};
module.exports = SiteAngularPageAccueil;