这就是我现在拥有的风格。一个相当简单的页面对象模型。
var loginPage = require('../pages/loginPage');
var homePage = require('../pages/homePage');
describe('Login', function () {
it('Valid Login should successfully reach the home page, with valid page title.', function () {
browser.driver.get("https://dev.mysite.com/");
loginPage.login('TestUser', 'TestPassword');
homePage.getHeaderText();
//expect header text to equal "My header"
});
});
官方量角器样式指南建议这样做。它似乎为每个测试唯一的页面创建一个对象。这样做是否有优势?
var loginPage = require('../pages/loginPage');
var homePage = require('../pages/homePage');
describe('Login', function () {
var loginPageObj = new loginPage();
var homePageObj = new homePage();
it('Valid Login should successfully reach the home page, with valid page title.', function () {
browser.driver.get("https://dev.mysite.com/");
loginPageObj.login('TestUser', 'TestPassword');
//or should homePageObj be initialized here,
//right before it is first used?
homePageObj.getHeaderText();
//expect header text to equal "My header"
});
});
答案 0 :(得分:2)
使用自己的风格方式仍然很好。
官方指南为何如此说, 它将有助于使测试文件独立。 如果将实例化为对象,则可以很好地定义范围。 并且更好地理解/可读代码。
我以前也遵循自己的风格。
现在我正在使用typescript / protractor组合。新风格指南更有意义。
但这两种风格在功能上与你自己的风格完全无关。 :)
答案 1 :(得分:1)
你没有规范中的初始主页。 您可以从loginPageObj.login(' TestUser',' TestPassword')返回; 登录登录页面对象看起来像这样:
var loginPage = function() {
this.txtUserName = element(by.xpath('xpath'));
this.txtPassword = element(by.xpath('xpath'));
this.login = function(strUsername,strPassword) {
var self = this;
this.txtUserName.isPresent().then(function(status){
if(status){
self.txtUserName.sendKeys(strUsername);
self.txtPassword.sendKeys(strPassword);
self.btnLogin.click();
}
});
return require('../Pages/HomePage.js');
}}
module.exports = new loginPage();
在测试规范中使用它
var homePage = loginPage.login(browser.params.username, browser.params.password);
homePage.getHeaderText();