我是否需要使用 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 组合。新风格指南提供更多意义的地方。
但是这两种风格在功能上都完美无缺,与您自己的风格没有任何问题。 :)
这就是我现在的风格。一个相当简单的页面对象模型。
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 组合。新风格指南提供更多意义的地方。
但是这两种风格在功能上都完美无缺,与您自己的风格没有任何问题。 :)