我是否需要使用 Protractor 初始化 Spec 文件中的页面对象?

Do I need to Initialize the page object in my Spec file with Protractor?

这就是我现在的风格。一个相当简单的页面对象模型。

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"
  });
});

您不必在规范中初始化主页。 你可以从 loginPageObj.login('TestUser', 'TestPassword') 得到它 return; 登录登录页面对象看起来像这样:

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();

按照自己的风格来使用还是不错的。

为什么官方指南这么说, 这将有助于使测试文件独立。 如果您实例化为对象,您可以很好地定义您的范围。 并更好地理解/可读代码。

我以前也是按照你自己的风格来的。

现在我正在使用 typescript/protractor 组合。新风格指南提供更多意义的地方。

但是这两种风格在功能上都完美无缺,与您自己的风格没有任何问题。 :)