我正在尝试在我的项目中实现页面对象模型,但我无法让它工作。我想使用browser.getTitle()获取当前页面的标题,直接在 login.spec.js 中使用时效果很好,但在移动到 login.po时不起作用的.js 即可。以下是我目前的设置:
var LoginPage = require('../../pages/user/login.po.js'),
expect = require('chai').expect;
describe('Login', function() {
var page;
beforeEach(function () {
page = new LoginPage();
});
it('should be able to get the page title', function() {
expect(page.getLoginPageTitle).to.equal('Test');
});
});
'use strict';
var LoginPage = function(){
browser.get('http://localhost:3000/');
};
LoginPage.prototype = Object.create({}, {
getLoginPageTitle: {get: function() {
browser.getTitle().then(function(res){
return res;
});
}}
});
module.exports = LoginPage;
我得到的错误:
AssertionError: expected undefined to equal 'Test'
经过进一步调查,我的login.po.js中的browser.getTitle()承诺似乎没有得到解决。
关于我做错的任何想法?该页面在Chrome中正确加载,Chrome会显示正确的网页标题。
答案 0 :(得分:1)
你应该在PageObject中添加额外的回报。您将返回已解决的承诺browser.getTitle()
的结果,但不会返回承诺本身,请参阅下文。
'use strict';
var LoginPage = function() {
browser.get('http://localhost:3000/');
};
LoginPage.prototype = Object.create({}, {
getLoginPageTitle: {
get: function() {
return browser.getTitle();
}
}
});
module.exports = LoginPage;
答案 1 :(得分:1)
最终想到它! (没有双关语)
我只需使用chai-as-promised以及使用wswebcreation的答案。这是我现在的设置:
var LoginPage = require('../../pages/user/login.po.js'),
chai = require('chai'),
expect = require('chai').expect,
chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised)
describe('Login', function() {
var page;
beforeEach(function () {
page = new LoginPage();
});
it('should be able to get the page title', function() {
expect(page.getLoginPageTitle).to.eventually.equal('Test');
});
});
'use strict';
var LoginPage = function(){
browser.get('http://localhost:3000/');
};
LoginPage.prototype = Object.create({}, {
getLoginPageTitle: {get: function() {
return browser.getTitle();
}}
});
module.exports = LoginPage;