重用功能

时间:2016-02-10 14:37:35

标签: javascript protractor

我想我知道解决方案背后的理论,但我在实施它时遇到了麻烦。请考虑以下代码:

    this.selectFirstPassiveService = function () {
    getFirstPassiveService().element(by.tagName('input')).click();
}

this.clickAddTask = function () {
    getFirstActiveService().element(by.tagName('a')).click();
}

this.selectTask = function () {
    getFirstActiveService()
        .element(by.tagName('option'))
        .$('[value="0"]')
        .click();
}

this.saveTask = function () {
    getFirstActiveService().element(by.name('taskForm')).submit();
}

getFirstActiveService = function () {
    return services.filter(function (elem) {
        return elem.getAttribute('class').then(function (attribute) {
            return attribute === 'service active ';
        });
    }).first();
}

getFirstPassiveService = function () {
    return services.filter(function (elem) {
        return elem.getAttribute('class').then(function (attribute) {
            return attribute === 'service passive ';
        });
    }).first();
}

};

为了最小化代码重复,我创建了两个函数: * getFirstActiveService() * getFirstPassiveService()

我的规格如下:

    it('Select service', function () {
      servicePage.selectFirstPassiveService();
      servicePage.clickAddTask();
      servicenPage.selectTask()();
    });

clickAddTask()和selectTask()都使用名为getFirstActiveService()的函数。在clickAddTask()中一切运行正常但是当我在selectTask()中使用函数时,量角器无法找到一些元素(存在)。

根据我的理论,当在clickAddTask()中调用函数然后执行时,getFirstActiveService()中的每个命令都在控制流中排队。当重新使用selectTask()中的函数时,命令没有排队,使用了clickAddTask()中创建的实例,因此,从那时起DOM已经发生了变化,因此无法找到一些元素。

现在第一个问题:我的理论是否正确? 第二个问题:我该如何解决这个问题?

提前致谢! 干杯

1 个答案:

答案 0 :(得分:0)

我重构了一下它现在有效。 问题出在测试本身,而不是重用功能。