Я новичок в транспортире.Если вам интересно, почему я разделяю файл функций на папки, я хочу сказать, какой браузер не смог сообщить об огурцах.Если я запускаю все 4 браузера в одной папке specs: 'features/*.feature'
, я не могу сказать, какой тест браузера не прошел в конце для отчета об огурцах.
Отчет об огурцах: https://github.com/damianszczepanik/cucumber-reporting
Пока я изучаю этот новый фреймворк, я пытался запустить тестирование нескольких браузеров с одной и той же спецификацией (например, вход в систему / выход из системы IE, safari, firefox, chrome) на сетке селена.Я заметил, что запуск 4 разных браузеров на сетке селена на 4 разных компьютерах иногда дает сбой в параллельном режиме, но он проходит, когда я запускаю тестирование 1 браузера на 1 машине.Не удается либо один из браузеров не может найти элемент на странице, либо браузер застрял.
Каков наилучший метод для запуска тестирования нескольких браузеров?Предполагаете ли вы запускать параллельные тесты для одного и того же файла спецификаций или параллельное тестирование поможет запустить другие файлы спецификаций?Путь к файлу объектов здесь выглядит следующим образом:
features / chrome / login.feature
features / safari / login.feature
features / firefox / login.feature
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
framework: 'custom',
// path relative to the current config file
frameworkPath: require.resolve('protractor-cucumber-framework'),
multiCapabilities:
[{
'browserName': 'chrome',
specs: 'features/chrome/*.feature'
},
{
'browserName': 'firefox',
specs: 'features/firefox/*.feature'
},
{
'browserName': 'internet explorer',
specs: 'features/ie/*.feature'
},
{
'browserName': 'safari',
specs: 'features/safari/*.feature'
}],
maxSessions: 2,
baseUrl: 'https://localhost:8080',
cucumberOpts: {
strict: true,
require: [
'hooks/hooks.js',
'specs/*Spec.js'
],
tags: [
"@runThis",
"~@ignoreThis"
],
profile: false,
format: 'json:e2e/reports/cucumber-report.json',
resultJsonOutputFile: 'e2e/reports/cucumber-report.json'
},
onPrepare: function() {
const fs = require('fs');
const path = require('path');
const directory = 'e2e/reports';
//cleans up the json results from the previous build when using node flake
// fs.readdir(directory, (err, files) => {
// if (err) throw err;
// for (const file of files) {
// fs.unlink(path.join(directory, file), err => {
// if (err) throw err;
// });
// }
// });
var chai = require('chai');
chai.use(require('chai-as-promised'));
global.expect = chai.expect;
browser.ignoreSynchronization = true;
browser.manage().window().maximize();
browser.waitForAngular(false);
}
}
Feature: Login to see the dashboard pages and logout
@runThis
Scenario: Open the browser and login
Given I am on the login page
When I should be able to login with my credentials
When I logout
Then I should be able to see login page
LoginSpec.js
let loginPage = require('../pages/loginPage.js');
const username = 'xxx';
const password = 'xxx';
module.exports = function() {
this.Given('I am on the login page', function() {
browser.get("https://localhost:8080");
});
this.When('I should be able to login with my credentials', function() {
loginPage.setUsername(username);
loginPage.setPassword(password);
loginPage.clickLogin();
loginPage.loaded(loginPage.HAMBERBURGER_MENU_ICON_CLASS);
});
this.When('I logout', function() {
loginPage.openSideMenu();
loginPage.clickLogout();
loginPage.clickLogoutPopup();
});
this.Then('I should be able to see login page', {timeout: 120 * 1000}, async function () {
expect(await element(by.id(loginPage.LOGIN_BUTTON_ID)).isPresent()).to.equal(true);
});
};