从webdriverJS / Protractor中的Page Object函数返回另一个Page Object?

时间:2014-09-15 08:15:51

标签: javascript selenium webdriver protractor pageobjects

我习惯使用WebDriver Java方法实现页面对象模式,其描述为here 因此,Java WebDriver Page Object模式中的所有内容归结为以下内容:

  
      
  1. 公共方法代表页面提供的服务
  2.   
  3. 尽量不要公开页面的内部结构
  4.   
  5. 一般不做断言
  6.   
  7. 方法返回其他PageObjects
  8.   
  9. 无需代表整页
  10.   
  11. 相同操作的不同结果被建模为不同   方法
  12.   

所以我关注点 4.Methods返回其他PageObjects - 是否可以应用于webdriverJS或Protractor案例?

我之所以这样说是因为我还没有看到这种方法适用于Protractor脚本 - 通常所有规格(茉莉花中的测试)都只用于测试一页,但不测试完整的工作流程(1.logging in 2.进入系统进一步测试系统的整个功能,但不仅仅是一页) E.g:

MainPage=require('./MainPage.js');
var LoginPage = function() {
    this.userNameInput = element(by.id('login'));
    this.passwordInput = element(by.id('password'));
    this.submitButton = element(by.id('submit'));

    this.loginWithValidCredentials= function(userName, password) {
        this.userNameInput.sendKeys(userName);
        this.passwordInput.sendKeys(password);
        this.submitButton.click();
        return new MainPage();
    };

    this.loginWithInvalidCredentials = function(userName, password) {
        this.userNameInput.sendKeys(userName);
        this.passwordInput.sendKeys(password);
        this.submitButton.click();
        return this;
    };
};
module.exports = LoginPage;
  1. 从LoginPage对象成功登录页面: loginWithValidCredentials()函数应返回新的MenuPage对象
  2. 不成功从LoginPage对象登录页面: loginWithInvalidCredentials()函数应返回相同的LoginPage对象(例如 this
  3. 所以基本上我想在spec文件中使用这个Page Object模式,如下所示:

    var LoginPage = require('../pages/LoginPage.js');
    describe('Login with username and password', function () {
        var loginPage = new LoginPage();
        var mainPage; 
      it('Logging in with VALID credentials', function () {               
      mainPage = loginPage.loginWithValidCredentials(
                        "username",
                        "password");
     **//interaction with mainPage goes here**
    });
    

0 个答案:

没有答案