我收到“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);
});
});
答案 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/的内容,以使您的测试更有条理和可读性