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

时间:2019-01-02 18:17:00

标签: javascript node.js jasmine protractor

我们在网站一页上的元素中定义变量,单击“编辑”按钮将打开下一页。在此页面中,我们需要断言上一页捕获的数据与第二页上显示的数据匹配。我们的问题是,一旦测试移至第二页,它就无法调用我们在第一页上定义的变量。以下是我们的代码段:

     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页,因此我们不知为什么会发生这种情况。我们如何解决这个问题并将变量用于断言目的?

2 个答案:

答案 0 :(得分:2)

问题是您已经指定了then()回调函数,在该回调函数中您只记录了该值而没有返回它:

var Student_ID = cells.get(0).getText().then(function(SID){
    console.log(SID);
});

一无所获,Student_ID将成为一个承诺,将化为undefined

您需要退货:

var Student_ID = cells.get(0).getText().then(function(SID){
    console.log(SID);
    return SID;
});

或者,完全删除自定义回调:

var Student_ID = cells.get(0).getText();

答案 1 :(得分:0)

实际上,以下部分引起了问题。移除此部分后,测试即可正常进行。

.then(function(SID){ console.log(SID); });