2016-05-12 96 views
0

我得到“类型错误使用类时:下拉不尝试做以下的某一功能:获得“类型错误:下拉是不是一个函数”试图量角器

/* 
* 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

在哪一行发生错误?我想'myDd:new Dropdown(element(by.css('select')),'但也许你可以添加这个潜在的重要信息。 – 11684

+0

你是如何导出Dropdown的?换句话说,需要'知道在哪里可以找到它?不应该用'define'或'exports'做些什么吗?你只是使用RequireJS吗?是否需要你使用另一个框架或库的一部分?其中? – 11684

回答

1

为@ 11684提到的 - 你忘了导出下拉列表和PageObject类和require('Dropdown');返回未定义。量角器运行在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/让你的测试更有组织和可读性

+0

/我刘海的头靠在墙上,当然我没有做... ...是的,我做了,我为PageObject做了它,但忘记了Dropdown,谢谢其他信息,我会检查出来。 – Machtyn

+0

Cheers Machtyn , 很高兴有帮助。 –

相关问题