尝试在量角器中使用类时,获取“TypeError:Dropdown不是函数”

时间:2016-05-12 21:08:30

标签: javascript node.js protractor

我收到“TypeError:Dropdown在尝试执行以下操作时不是函数:

/*
 * Dropdown.js
 */

var __container;

function Dropdown(el) {
   __container = el;
}

Dropdown.prototype = {
   constructor: Dropdown,

   getOptions: function() { return __container.element.all(by.css('option')); },

   // my other prototype methods
}

-

/*
 * PageObject.js
 */

var Dropdown = require('Dropdown');

var PageObject() {}

PageObject.prototype = {
   constructor: PageObject,

   myDd: new Dropdown(element(by.css('select')),

   //my other prototype methods which do work
};

-

/*
 * spec.js
 */

var PageObject = require('PageObject');

describe('Test my page', function() {
   it('should test the dropdown', function() {
      browser.get(mypage);
      var pageObject = new PageObject();
      expect(pageObject.myDd.getOptions().isPresent()).toBe(true);
   });
});

1 个答案:

答案 0 :(得分:1)

如@ 11684所述 - 您忘记导出Dropdown和PageObject类,require('Dropdown');返回undefined。 Protractor在node.js上运行,因此您需要填补CommonJS模块的空白。此外,如果您想要使用未安装npm的模块,则必须使用相对路径而不是

来定位它们
var PageObject = require('PageObject');

您需要执行类似

的操作
var PageObject = require('./pages/PageObject');
var Dropdown = require('../helpers/Dropdown');

要使用commonJS模块在节点环境中导出模块,您需要将它们导出为导出对象上设置的属性/方法集,或者您可以直接将构造函数分配给它,以便它可以直接在所需模块

// in Dropdown
module.exports = Dropdown;

// in PageObject
module.exports = PageObject;

如果您打算在测试中使用更多的node.js,那么您应该阅读有关使用commonJS模块https://nodejs.org/docs/latest/api/modules.html以及node.js本身的更多信息。建议您查看ES6中您可以使用http://node.green/的内容,以使您的测试更有条理和可读性