我正在使用JavaScript(Protractor)进行一些端到端测试。我有一个包含以下内容的PageObjects文件:
var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title +'"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
};
};
module.exports = new SomeClass();
在我的规范中,我试图像这样访问嵌套函数:
describe('some test', function() {
var someClass = require('./some_class.po.js');
var data = require('./some_class.data.json');
it('do stuff', function() {
someClass.get();
someClass.person.setTitle(data.title);
someClass.person.setFirstName(data.firstName);
someClass.person.setLastName(data.lastName);
});
});
当我尝试运行此测试时,较高级someClass.get()
工作正常,但当它尝试执行someClass.person.setTitle(data.title)
时,我收到Failed: undefined is not a function
消息。
知道我做错了什么吗?我只使用制定者,没有吸气剂。不要以为我需要退货。
答案 0 :(得分:2)
您需要对代码进行一些更改才能访问inner
的{{1}}个功能。在person()
末尾添加了return this
,以便可以从person()
外部访问person()
的内部属性和方法。
请参阅以下代码中突出显示的更改。
person()
然后,您可以按照以下方式访问var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title + '"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
return this;
// ^^^^^^^^^
};
};
module.exports = new SomeClass();
。
setTitle
<强>演示强>
someClass.person().setTitle(data.title)
// ^^