我一直在尝试使用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'变得无法进入。
有没有其他人遇到过此问题并找到了解决此问题的方法?在我的页面对象上保持相同的值会变得很麻烦。
答案 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;