量角器串行规范执行

时间:2015-04-08 18:40:58

标签: selenium jasmine protractor angularjs-e2e e2e-testing

我的测试重构后遇到了奇怪的问题。为了大大减少执行时间,我在每个/每个块之前的所有地方都弃用了,现在我有一个接一个地运行简单规格的问题。我已经创建了简单的配置和规范。

配置:

 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]运行WebDriver F的1个实例。

     

故障:

     

1)Google Spec验证搜索输入显示消息:        预计错误是真的。堆栈跟踪:        错误:期望失败       在[object Object]。 (/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)

     

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

     

[launcher] WebDriver的0个实例仍在运行[launcher] chrome

     

1次失败1次测试[发射器]整体:1次失败规格[启动器]进程退出,错误代码为1

     

使用退出代码1完成处理

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

1 个答案:

答案 0 :(得分:3)

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

如果您希望在规范中的所有it块之前执行某些代码,请使用beforeAll()(内置于Jasmine 2中,可用作Jasmine 1的third-party。 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);
    });
});

另请注意,您可以使用Expected Conditions来简化wait()阻止:

var EC = protractor.ExpectedConditions;
var elm = element(by.name('q'));

browser.wait(EC.visibilityOf(elm), 15000);