这可能有一个简单的解决方案,但我只是没有看到它。我正在编写量角器测试并设置页面对象文件
newstate.js(页面对象文件)
'use strict';
var newstate = function (url) {
browser.get(url);
};
newstate.prototype = Object.create({}, {
dd: { select: function(state) { $('select option[value="'+state+'"]').click(); } }
});
module.exports = newstate;
spec.js文件:
'use strict';
var newstate = require('newstate.js');
describe('Testing newstate', function() {
var statePage;
beforeAll(function() {
statePage = new newstate('http://localhost:8080');
});
it('should select a state', function() {
statePage.dd.select('AK');
})
})
conf.js文件:
exports.config = {
framework: 'jasmine',
specs: ['test-spec.js'],
useAllAngular2AppRoots: true,
jasmineNodeOpts: {
showColors: true
}
};
当我运行量角器时,我得到:
$ protractor conf.js
Failures:
1) Testing newstate should select a state
Message:
Failed: Cannot read property 'select' of undefined
正在启动浏览器,打开网页,就像我应该调用new newstate('...')
时一样。但由于某种原因,它并不想看到我的dd.select功能。我错过了什么或做错了什么?感谢。
答案 0 :(得分:2)
您使用Object.create的方式不正确。在你的情况下适当的表示法将是:
//retrieve the bundle
Bundle bundle = getArguments(); //retrieve the bundle
String bundleText = bundle.getString("USER"); //get the data on the bundle
//find view & set the text
usernameTextView = (TextView) view.findViewById(R.id.usernametext);
usernameTextView.setText(bundleText);
var newstate = function (url) {
browser.get(url);
};
newstate.prototype = Object.create({
dd: { select: function(state) { $('select option[value="'+state+'"]').click(); } }
});
对象上select
未定义的原因是dd
的第二个参数是property descriptor object,而不仅仅是具有您提供的属性的对象。
但是,在您的情况下,您根本不需要Object.create,因为Object.create
就足够了。