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

时间:2018-05-03 14:04:01

标签: javascript selenium protractor pageobjects

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

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

2 个答案:

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