量角器串行规范执行
protractor serial spec execution
测试重构后我遇到了奇怪的问题。为了显着减少执行时间,我在所有地方都弃用了 beforeEach/afterEach 块,现在我遇到了 运行 一个又一个简单规格的问题。我已经创建了简单的配置和规格。
配置:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: [
'googleSpec.js',
'forgotPasswordPageTestSuite.js'
],
capabilities:
{
browserName: 'chrome'
//shardTestFiles: true,
//maxInstances: 2
},
jasmineNodeOpts: {
defaultTimeoutInterval: 360000
}
}
规范 1:
describe("Google Spec", function()
{
browser.ignoreSynchronization = true;
browser.get('http://google.com');
browser.wait(function () {
return element(by.name('q')).isDisplayed();
}, 15000);
it('Verify search inout is presented', function()
{
expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
});
});
规范 2:
describe("Yandex spec", function()
{
browser.ignoreSynchronization = true;
browser.get('http://www.yandex.ru');
browser.wait(function () {
return element(by.id('text')).isDisplayed();
}, 15000);
});
it('Verify that search input is presented', function()
{
expect(browser.isElementPresent(by.id('text'))).toBe(true);
});
});
如果我使用
单独执行它们
shardTestFiles: true,
maxInstances: 2
没问题,但是当我有上面的配置时,我有这样的异常:
[launcher] Running 1 instances of WebDriver F.
Failures:
1) Google Spec Verify search inout is presented Message:
Expected false to be true. Stacktrace:
Error: Failed expectation
at [object Object]. (/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)
Finished in 6.339 seconds 2 tests, 2 assertions, 1 failure
[launcher] 0 instance(s) of WebDriver still running [launcher] chrome
1 failed 1 test(s) [launcher] overall: 1 failed spec(s) [launcher] Process exited with error code 1
Process finished with exit code 1
在我的实际测试中,当我的规格与我提供的相似时,我遇到了同样的问题。当我出于某种原因查看真正发生的事情时,第二个规范中的 .get(url) 方法在第一个规范完成之前开始执行。我想我遗漏了一些核心和重要的东西,请有人指点我)
我认为使用此设置无法保证 protractor
会执行 wait()
调用并在执行 it()
.
之前等待结果
如果您希望在规范中的所有 it
块之前执行一些代码,请使用 beforeAll()
(内置于 Jasmine 2 中,作为 Jasmine 的 third-party 1.x):
describe("Google Spec", function()
{
beforeAll(function () {
browser.ignoreSynchronization = true;
browser.get('http://google.com');
browser.wait(function () {
return element(by.name('q')).isDisplayed();
}, 15000);
});
it('Verify search inout is presented', function()
{
expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
});
});
另请注意,您可以使用 来简化 wait()
块:
var EC = protractor.ExpectedConditions;
var elm = element(by.name('q'));
browser.wait(EC.visibilityOf(elm), 15000);
测试重构后我遇到了奇怪的问题。为了显着减少执行时间,我在所有地方都弃用了 beforeEach/afterEach 块,现在我遇到了 运行 一个又一个简单规格的问题。我已经创建了简单的配置和规格。
配置:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: [
'googleSpec.js',
'forgotPasswordPageTestSuite.js'
],
capabilities:
{
browserName: 'chrome'
//shardTestFiles: true,
//maxInstances: 2
},
jasmineNodeOpts: {
defaultTimeoutInterval: 360000
}
}
规范 1:
describe("Google Spec", function()
{
browser.ignoreSynchronization = true;
browser.get('http://google.com');
browser.wait(function () {
return element(by.name('q')).isDisplayed();
}, 15000);
it('Verify search inout is presented', function()
{
expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
});
});
规范 2:
describe("Yandex spec", function()
{
browser.ignoreSynchronization = true;
browser.get('http://www.yandex.ru');
browser.wait(function () {
return element(by.id('text')).isDisplayed();
}, 15000);
});
it('Verify that search input is presented', function()
{
expect(browser.isElementPresent(by.id('text'))).toBe(true);
});
});
如果我使用
单独执行它们shardTestFiles: true,
maxInstances: 2
没问题,但是当我有上面的配置时,我有这样的异常:
[launcher] Running 1 instances of WebDriver F.
Failures:
1) Google Spec Verify search inout is presented Message: Expected false to be true. Stacktrace: Error: Failed expectation at [object Object]. (/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)
Finished in 6.339 seconds 2 tests, 2 assertions, 1 failure
[launcher] 0 instance(s) of WebDriver still running [launcher] chrome
1 failed 1 test(s) [launcher] overall: 1 failed spec(s) [launcher] Process exited with error code 1
Process finished with exit code 1
在我的实际测试中,当我的规格与我提供的相似时,我遇到了同样的问题。当我出于某种原因查看真正发生的事情时,第二个规范中的 .get(url) 方法在第一个规范完成之前开始执行。我想我遗漏了一些核心和重要的东西,请有人指点我)
我认为使用此设置无法保证 protractor
会执行 wait()
调用并在执行 it()
.
如果您希望在规范中的所有 it
块之前执行一些代码,请使用 beforeAll()
(内置于 Jasmine 2 中,作为 Jasmine 的 third-party 1.x):
describe("Google Spec", function()
{
beforeAll(function () {
browser.ignoreSynchronization = true;
browser.get('http://google.com');
browser.wait(function () {
return element(by.name('q')).isDisplayed();
}, 15000);
});
it('Verify search inout is presented', function()
{
expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
});
});
另请注意,您可以使用 wait()
块:
var EC = protractor.ExpectedConditions;
var elm = element(by.name('q'));
browser.wait(EC.visibilityOf(elm), 15000);