1

测试重构后,我遇到了奇怪的问题。我弃用了 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
    }
}

规格一:

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

没关系,但是当我有上述配置时,我有这样的例外:

[启动器] 运行 1 个 WebDriver F 实例。

失败:

1)谷歌规范验证搜索输入输出消息:预期假为真。Stacktrace:错误:[object Object] 的期望失败。(/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)

在 6.339 秒内完成 2 个测试,2 个断言,1 个失败

[启动器] 0 个 WebDriver 实例仍在运行 [启动器] chrome

1 个失败的 1 个测试 [启动器] 总体:1 个失败的规范 [启动器] 进程退出,错误代码为 1

进程以退出代码 1 结束

在我的真实测试中,当我的规格与我提供的类似时,我遇到了同样的问题。当我查看由于某种原因真正发生的事情时,来自第二个规范的 .get(url) 方法在第一个规范完成之前开始执行。我想我错过了一些核心和重要的东西,谁能指出我)

4

1 回答 1

3

我认为使用此设置无法保证protractor会执行该wait()调用并在执行之前等待结果it()

如果您希望在规范中的所有块之前执行一些代码it,请使用beforeAll()(内置在 Jasmine 2 中,可作为Jasmine 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);
于 2015-04-08T18:51:47.190 回答