量角器串行规范执行

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);