Javascript 量角器将变量值显示为;“未定义”;
我们从网站的一个页面上的元素定义变量,点击编辑按钮,打开下一个页面。在本页中,我们需要声明在前一页捕获的数据与第二页显示的数据匹配。我们的问题是,一旦测试移到第2页,它就无法调用我们在第1页定义的变量。下面是我们的代码片段:Javascript 量角器将变量值显示为;“未定义”;,javascript,node.js,jasmine,protractor,Javascript,Node.js,Jasmine,Protractor,我们从网站的一个页面上的元素定义变量,点击编辑按钮,打开下一个页面。在本页中,我们需要声明在前一页捕获的数据与第二页显示的数据匹配。我们的问题是,一旦测试移到第2页,它就无法调用我们在第1页定义的变量。下面是我们的代码片段: it ('Student ID Validation', function(){ // get rows var rows = tableData_Dashboard.all(by.tagName("tr"));
it ('Student ID Validation', function(){
// get rows
var rows = tableData_Dashboard.all(by.tagName("tr"));
// get cell values
var cells = rows.all(by.tagName("td"));
var Student_ID = cells.get(0).getText().then(function(SID){
console.log(SID);
});
Edit_Button_1.click();
browser.sleep(2000);
expect(Student_ID_on_Reg_Page.getAttribute('value')).toEqual(Student_ID);
执行之后,我们得到以下错误
Message:
Expected '123456' to equal undefined.
我们怀疑这可能是由于异步,但事实并非如此。测试在存储了第1页的变量后移到第2页,因此我们不知道为什么会发生这种情况。我们如何解决这个问题并将变量用于断言目的?事实上,以下部分是导致问题的原因。一旦我们删除了这个部分,测试工作正常
.then(函数(SID){
控制台日志(SID);
});代码>问题在于您指定了then()
回调,在该回调中只记录值,但不返回值:
var Student_ID = cells.get(0).getText().then(function(SID){
console.log(SID);
});
由于没有返回任何内容,Student\u ID
将成为一个承诺,它将解析为未定义的
您需要退货:
var Student_ID = cells.get(0).getText().then(function(SID){
console.log(SID);
return SID;
});
或者,完全删除自定义回调:
var Student_ID = cells.get(0).getText();
谢谢。这正是我们错过的。小心点。它可能不会一直工作。要理解我的意思,请研究JS中承诺与异步函数的区别