Je veux intégrer Protractor avec un échafaudage produit par Yeoman. J'ai suivi un tutoriel et là, le plus ancien scenario-runner
a été utilisé pour configurer les tests e2e (via grunt
).
Je voudrais mettre à niveau mon échafaudage et utiliser plutôt le rapporteur.
Des pensées?
Installez protractor
et grunt-protractor-runner
de npm
:
npm install protractor grunt-protractor-runner --save-dev
Créez un fichier de configuration pour le rapporteur (protractor.conf.js
), remplacez specs
et baseUrl
par vos fichiers de test et votre serveur de test:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['test/e2e/*_test.js'],
baseUrl: 'http://localhost:9001' //default test port with Yeoman
}
Mettez à jour votre Gruntfile.js
, ajoutez ce qui suit après la tâche de karma:
protractor: {
options: {
keepAlive: true,
configFile: "protractor.conf.js"
},
run: {}
}
Ajouter la tâche rapporteur en cours de test
grunt.registerTask('test', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'karma',
'protractor:run'
]);
Téléchargez et démarrez le serveur Selenium:
node_modules/protractor/bin/webdriver-manager update
node_modules/protractor/bin/webdriver-manager start
(Sous Windows :)
node node_modules/protractor/bin/webdriver-manager update
node node_modules/protractor/bin/webdriver-manager start
Mettez à jour votre package.json
, ajoutez ce qui suit après "devDependencies"
. Cela exécutera la commande après npm install
pour que vous n'ayez pas besoin de vous souvenir à chaque fois.
"scripts": {
"install": "node node_modules/protractor/bin/webdriver-manager update"
}
Exécutez le test à l'aide de grunt
grunt test
Si vous souhaitez que le rapporteur démarre le serveur pour vous, supprimez
seleniumAddress: 'http://localhost:4444/wd/hub',
de protractor.conf.js
, puis en exécutant grunt test
démarrera une instance Selenium autonome pendant le test et la quittera après avoir exécuté la suite de tests.
Une chose à ajouter à la réponse existante; si vous souhaitez démarrer automatiquement le serveur Selenium, vous devez également spécifier l'emplacement de votre seleniumServerJar et chromeDriver (si vous utilisez Chrome), sinon les tests ne fonctionneront pas tant que vous n'aurez pas démarré manuellement le serveur Selenium (assurez-vous d'exécuter "webdriver- mise à jour du gestionnaire "à partir de la ligne de commande en premier):
protractor: {
options: {
keepAlive: false,
configFile: "test/config/protractor.conf.js",
noColor: true, // If true, protractor will not use colors in its output.
args: {
seleniumServerJar: 'node_modules/protractor/Selenium/selenium-server-standalone-2.39.0.jar',
chromeDriver: 'node_modules/protractor/Selenium/chromedriver.exe'
}
},
run: {
}
},
Comme @ user2172816 mentionne dans sa réponse - en laissant de côté seleniumAddress: 'http://localhost:4444/wd/hub'
à partir de votre configuration de rapporteur fera généralement que Protractor démarrera une instance de sélénium pour vous.
Comme alternative, vous pouvez utiliser grunt-protractor-webdriver pour démarrer Selenium:
1) Installez et enregistrez grunt-protractor-webdriver
npm install grunt-protractor-webdriver --save-dev
2) Ajoutez les éléments suivants dans votre fonction de définition de Grunt:
grunt.loadNpmTasks('grunt-protractor-webdriver');
3) Ajoutez l'exemple de tâche de Webdriver rapporteur suivant:
protractor_webdriver: {
start: {
options: {
path: 'node_modules/protractor/bin/',
command: 'webdriver-manager start'
}
}
}
4) Ajoutez protractor_webdriver
à votre tâche test
avant d'exécuter le rapporteur, par exemple.
grunt.registerTask('test', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'karma',
'protractor_webdriver',
'protractor:run'
]);