Javascript 量角器将变量值显示为;“未定义”;

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"));

我们从网站的一个页面上的元素定义变量,点击编辑按钮,打开下一个页面。在本页中,我们需要声明在前一页捕获的数据与第二页显示的数据匹配。我们的问题是,一旦测试移到第2页,它就无法调用我们在第1页定义的变量。下面是我们的代码片段:

     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中承诺与异步函数的区别