我习惯使用WebDriver Java方法实现页面对象模式,其描述为here 因此,Java WebDriver Page Object模式中的所有内容归结为以下内容:
- 公共方法代表页面提供的服务
- 尽量不要公开页面的内部结构
- 一般不做断言
- 方法返回其他PageObjects
- 无需代表整页
- 相同操作的不同结果被建模为不同 方法
醇>
所以我关注点 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;
所以基本上我想在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**
});