Geting"无法阅读财产' [方法]'未定义"

时间:2016-04-29 21:56:56

标签: javascript node.js protractor

这可能有一个简单的解决方案,但我只是没有看到它。我正在编写量角器测试并设置页面对象文件

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功能。我错过了什么或做错了什么?感谢。

1 个答案:

答案 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就足够了。