如何将量角器页面对象或规范文件中的某些功能重构为单独的文件?
How to refactor some function inside a Protractor Page Object or spec file into a separate file?
对于 PageObject,我们在页面底部有 buttons/links。我们必须向下滚动到底部才能单击。
var ContactAddPage = function() {
...
this.btnAdd = element(by.id('btnAdd'));
this.add = function() {
scrollToBottom();
this.btnAdd.click();
};
function scrollToBottom(){
browser.executeScript('window.scrollTo(0,10000);');
}
};
由于 scrollToBottom()
将在许多其他页面对象中使用,我假设我们可以将其重构为分隔文件,并以某种方式 require()
将其放入页面对象中。但是要怎么做呢?
至于spec文件,在beforeAll()
中会有不同角色登录和在afterAll()
中注销等通用功能。而勾选url也是每个页面通用的:
function loginAs(role) {
var loginPage = new LoginPage();
loginPage.login(role);
}
function logOut() {
var lnkLogOff = element(by.linkText('Log off'));
if (element(by.linkText('Log off')).isPresent()) lnkLogOff.click();
}
function expectRouteToBe(expectUrl) {
expect(browser.getCurrentUrl()).toBe(browser.baseUrl + expectUrl);
}
同样的问题:将它们移出并 require()
返回的正确方法是什么?
我们的量角器 e2e 测试集也有类似的东西。我们已经为测试中使用的可重用功能创建了一组帮助程序库。
示例:
创建 helpers.js
文件:
var Helpers = function() {
this.scrollToBottom = function () {
browser.executeScript('window.scrollTo(0,10000);');
};
};
module.exports = new Helpers();
要求并在您的页面对象中使用它:
var helpers = require("./helpers.js");
var ContactAddPage = function() {
this.btnAdd = element(by.id('btnAdd'));
this.add = function() {
helpers.scrollToBottom();
this.btnAdd.click();
};
};
module.exports = ContactAddPage;
您可以使用导出和原型继承来扩展模块...然后您可以在任何或所有页面中使用方法。例如。类似于:
basePage.js:
var BasePage = function() {
this.loginAs = function(role) {
this.login(role);
};
...
};
module.exports = new BasePage();
然后扩展任意页数:
var basePage = require('./basePage.js');
var MainPage = function() {
this.btnAdd = element(by.id('btnAdd'));
this.add = function() {
this.scrollToBottom();
this.btnAdd.click();
};
this.scrollToBottom = function() {
browser.executeScript('window.scrollTo(0,10000);');
};
};
MainPage.prototype = basePage;
module.exports = new MainPage();
然后在您的规范中,您可以:
var mainPage = require("../pages/mainPage.js");
...
it('should login and click add', function() {
mainPage.loginAs(role);
mainPage.btnAdd.click()
...
});
希望对您有所帮助...
对于 PageObject,我们在页面底部有 buttons/links。我们必须向下滚动到底部才能单击。
var ContactAddPage = function() {
...
this.btnAdd = element(by.id('btnAdd'));
this.add = function() {
scrollToBottom();
this.btnAdd.click();
};
function scrollToBottom(){
browser.executeScript('window.scrollTo(0,10000);');
}
};
由于 scrollToBottom()
将在许多其他页面对象中使用,我假设我们可以将其重构为分隔文件,并以某种方式 require()
将其放入页面对象中。但是要怎么做呢?
至于spec文件,在beforeAll()
中会有不同角色登录和在afterAll()
中注销等通用功能。而勾选url也是每个页面通用的:
function loginAs(role) {
var loginPage = new LoginPage();
loginPage.login(role);
}
function logOut() {
var lnkLogOff = element(by.linkText('Log off'));
if (element(by.linkText('Log off')).isPresent()) lnkLogOff.click();
}
function expectRouteToBe(expectUrl) {
expect(browser.getCurrentUrl()).toBe(browser.baseUrl + expectUrl);
}
同样的问题:将它们移出并 require()
返回的正确方法是什么?
我们的量角器 e2e 测试集也有类似的东西。我们已经为测试中使用的可重用功能创建了一组帮助程序库。
示例:
创建
helpers.js
文件:var Helpers = function() { this.scrollToBottom = function () { browser.executeScript('window.scrollTo(0,10000);'); }; }; module.exports = new Helpers();
要求并在您的页面对象中使用它:
var helpers = require("./helpers.js"); var ContactAddPage = function() { this.btnAdd = element(by.id('btnAdd')); this.add = function() { helpers.scrollToBottom(); this.btnAdd.click(); }; }; module.exports = ContactAddPage;
您可以使用导出和原型继承来扩展模块...然后您可以在任何或所有页面中使用方法。例如。类似于:
basePage.js:
var BasePage = function() {
this.loginAs = function(role) {
this.login(role);
};
...
};
module.exports = new BasePage();
然后扩展任意页数:
var basePage = require('./basePage.js');
var MainPage = function() {
this.btnAdd = element(by.id('btnAdd'));
this.add = function() {
this.scrollToBottom();
this.btnAdd.click();
};
this.scrollToBottom = function() {
browser.executeScript('window.scrollTo(0,10000);');
};
};
MainPage.prototype = basePage;
module.exports = new MainPage();
然后在您的规范中,您可以:
var mainPage = require("../pages/mainPage.js");
...
it('should login and click add', function() {
mainPage.loginAs(role);
mainPage.btnAdd.click()
...
});
希望对您有所帮助...