Protractor 量角器测试脚本未从函数中获取对象数据

Protractor 量角器测试脚本未从函数中获取对象数据,protractor,2-way-object-databinding,Protractor,2 Way Object Databinding,需要获取在函数中填充的对象数据以测试脚本的帮助,请。详情如下: 候选数据=函数(){ “名字”:“名字”, “lastName”:“lastName”, “手机”:“电话”, “primaryEmail”:“电子邮件” }; module.exports=新候选数据(); 测试脚本如下: var testData=require('candidateData'); var myFunction=require('getData'); testCandiate={}; testCandidate

需要获取在函数中填充的对象数据以测试脚本的帮助,请。详情如下:

候选数据=函数(){
“名字”:“名字”,
“lastName”:“lastName”,
“手机”:“电话”,
“primaryEmail”:“电子邮件”
};
module.exports=新候选数据();
测试脚本如下:
var testData=require('candidateData');
var myFunction=require('getData');
testCandiate={};
testCandidate=testData;
它('获取候选数据',函数(){
myFunction.getCandidateData(testCandidate);
log(`FirstName is-:${testCandidate.FirstName}:-`);
log(`LastName is-:${testCandidate.firstName}:-`);
log(`Phone is:${testCandidate.mobilePhone}:-`);
log(`主要电子邮件是-:${testCandidate.primaryEmail}:-`);
});
该函数在单独的js文件中定义为: //当我从页面的编辑字段捕获数据时,使用get属性值来获取值

var getData=function(){
this.getCandidateData=函数(testObj){
page.firstname.getAttribute(“值”)。然后(函数(fname){
testObj.firstName=fname;
}); 
page.lastname.getAttribute(“值”)。然后(函数(lname){
testObj.lastName=lname;
});
page.phone.getAttribute(“值”)。然后(函数(电话){
testObj.mobilePhone=电话;
});
page.email.getAttribute(“值”)。然后(函数(电子邮件){
testObj.primaryEmail=电子邮件;
});
};
};
module.exports=new getData();
运行脚本后,我将获得如下控制台日志结果,而不是字段上填充的数据:

名字是-:名字:- 姓氏是-:姓氏:- 移动电话是-:移动电话:- 主要电子邮件为-:主要电子邮件:-


请寻求帮助。

这不是一个量角器问题,而是您对承诺的基本误解,因为您正处于比赛状态。调用myfunction.getCandidateData(),该函数调用4个单独的函数来返回承诺。当这些函数获得您想要的属性时,javascript将继续在代码中运行。这意味着console.log语句将立即启动,而无需等待四个getAttribute承诺的解析

要解决此问题,必须将getCandidateData转换为返回承诺的函数。作为概念证明,请尝试以下操作,以确保将填充firstName:

var testData=require('candidateData');
var myFunction=require('getData');
testCandiate={};
testCandidate=testData;
它('获取候选数据',函数(){
myFunction.getCandidateData(testCandidate).then(()=>{
log(`FirstName is-:${testCandidate.FirstName}:-`);
});
//log(`LastName is-:${testCandidate.firstName}:-`);
//log(`Phone is:${testCandidate.mobilePhone}:-`);
//log(`主要电子邮件是-:${testCandidate.primaryEmail}:-`);
});

var getData=function(){
this.getCandidateData=函数(testObj){
返回page.firstname.getAttribute(“值”).then(函数(fname){
testObj.firstName=fname;
}); 
/*
page.lastname.getAttribute(“值”)。然后(函数(lname){
testObj.lastName=lname;
});
page.phone.getAttribute(“值”)。然后(函数(电话){
testObj.mobilePhone=电话;
});
page.email.getAttribute(“值”)。然后(函数(电子邮件){
testObj.primaryEmail=电子邮件;
});
*/
};
};
module.exports=new getData();

第一件事:语法错误是偶然的还是这是您代码的精确副本?谢谢Keeleon!让我试试。