量角器不能使用用此声明的本地属性。里面.then声明

时间:2017-03-30 09:24:07

标签: javascript angularjs selenium-webdriver protractor pageobjects

我一直在尝试使用Page Object模型以可重用的方式最好地组织我的Protractor e2e测试。在每个页面对象的开头,我将定义页面上的元素,然后是本地函数。 e.g:

'use strict';

var examplePage = function() {
    // Locators
    this.button1   = $('#button1')
    this.element1  = $('#element1');
    this.element2  = $('.element2');

    // Error Messages
    this.ERROR_ONE = 'There was an error!';

    // Protractor ExpectedConditions instance
    var until = protractor.ExpectedConditions;

    this.doSomeStuff = function() {
        this.button1.click().then(function() {
            browser.wait(until.visibilityOf(this.element1), global.TIMEOUT_INTERVAL_SHORT, this.ERROR_ONE);
            return this.element1;
        });
    };
};
module.exports = examplePage;

上面的代码只是一个例子。我的真实代码非常相似。

有时在我的代码中,我可能需要控制执行函数的顺序,以阻止函数执行得太早。但是,这会在.then语句中导致完全本地范围。例如,' this.ERROR_ONE'财产变得无法访问,因此我无法维护我的错误消息以及此消息。' this.element1'变得无法进入。

有没有其他人遇到过此问题并找到了解决此问题的方法?在我的页面对象上保持相同的值会变得很麻烦。

1 个答案:

答案 0 :(得分:0)

量角器团队对Protractor框架的PageObject模式有一个很好的tutorial。您不能使用this来声明变量。

您可以直接访问对象,如上面的教程 -

所示
var examplePage = function() {
    // Locators
    var button1   = $('#button1');
    var element1  = $('#element1');
    var element2  = $('.element2');

    // Error Messages
    var ERROR_ONE = 'There was an error!';

    // Protractor ExpectedConditions instance
    var until = protractor.ExpectedConditions;

    this.doSomeStuff = function() {
        this.button1.click().then(function() {
            browser.wait(until.visibilityOf(element1), global.TIMEOUT_INTERVAL_SHORT, ERROR_ONE);
            return element1;
        });
    };
};
module.exports = examplePage;