【发布时间】:2019-07-19 01:51:57
【问题描述】:
我正在使用 Protractor + Jasmine。
我有一个奇怪的问题。 我有 2 个测试套件(或 Spec.js)。我想一个接一个地运行它们(严格)。但是,量角器正在启动与 Spec1 相关的 BeforeAll()。并快速跳转到与 Spec2 相关的 BeforeAll()。
在 Spec1 中,有一个登录功能,有时登录需要 40 秒。是这个原因吗?
并且,从 Spec1 登录后,Protractor 跳转到 Spec2 并开始执行“BeforeAll”。稍后回到 Spec1 相关的“描述”。
请耐心等待这些大文件,因为它们对于调试至关重要。
如果我分别运行这两个规范,即不按顺序运行,一切都很好。
Spec1.js
beforeAll(function () {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
browser.waitForAngularEnabled(false);
browser.get(env.appUrl);
browser.getTitle().then(function (title) {
expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
});
browser.waitForAngularEnabled(true);
loginPage.login();
commonPage.navigateToUsers();
usersPage.deleteUsers(name);
});
describe('Create Users', function () {
it("Create user", function () {
something
});
it("Create user", function () {
something
});
});
Spec2.js
beforeAll(function () {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
browser.waitForAngularEnabled(false);
browser.get(env.appUrl);
browser.getTitle().then(function (title) {
expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
});
browser.waitForAngularEnabled(true);
loginPage.login();
commonPage.navigateToAccounts();
accountsPage.deleteAccounts(number);
});
describe('Create Accounts', function () {
it("Create Savings", function () {
something
});
it("Create current account", function () {
something
});
});
Conf.js
var env = require('./Utils/env.js');
var HTMLReport = require('protractor-html-reporter-2');
var JasmineReporters = require('jasmine-reporters');
exports.config =
{
baseUrl: 'http://localhost:9999',
directConnect: true,
framework: 'jasmine2',
suites: {
1sp: './mysuites/1Spec.js',
2sp: './mySuites/2Spec.js',
},
capabilities: {
'browserName': env.browserName,
'platform': env.osName,
//Closes any existing browsers
'shardTestFiles': false,
'maxInstances': 1
},
params: {
tempVar: false
},
onPrepare: async () => {
global.result = false;
var fs = require('fs-extra');
fs.emptyDir('./Reports/Screenshots/', function (err) {
console.log(err);
});
jasmine.getEnv().addReporter({
specDone: function (result) {
if (result.status == 'failed') {
browser.getCapabilities().then(function (caps) {
browser.takeScreenshot().then(function (png) {
var stream = fs.createWriteStream('./Reports/Screenshots/' + env.browserName + '-' + result.fullName + '.png');
stream.write(new Buffer(png, 'base64'));
stream.end();
});
});
}
}
});
var width = 1600;
var height = 1200;
browser.driver.manage().window().setSize(width, height);
//Html reporter
jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: './Reports',
filePrefix: 'xmlresults'
}));
},
onComplete: async () => {
var capsPromise = browser.getCapabilities();
capsPromise.then(function (caps) {
testConfig = {
reportTitle: 'UI Test Execution Report',
outputPath: './Reports',
outputFilename: 'UI Test Results',
screenshotPath: './screenshots',
testBrowser: 'FireFox',
modifiedSuiteName: false,
screenshotsOnlyOnFailure: true,
testPlatform: env.osName
};
new HTMLReport().from('./Reports/xmlresults.xml', testConfig);
});
}
};
【问题讨论】:
-
你也可以发布你的conf的功能部分吗?
-
您的完整 conf.js 文件将非常有帮助。这很可能是问题所在
-
附上配置 - 提前感谢您花时间帮助我 - 这些文件很长,但是它们可以帮助我们调试问题。
-
你用什么命令来执行你的代码?
-
由于我们尚未从 VSCode IDE 集成到 Jenkins,我正在运行 - 这可能是原因吗?如果其他一切看起来都很好,那么问题出在 vscode 本身。量角器正在“并行”运行。刚开始 Spec1 BeforeAll,跳转到第二个规范 - 执行 BeforeAll 方法。
标签: jasmine protractor