Транспортир показывает значение переменной как «неопределенный»

Вопрос задан: 7 месяцев назад Последняя активность: 7 месяцев назад
up 1 down

Мы определяем переменные из элементов на одной странице сайта, нажимая на кнопку редактирования, которая открывает следующую страницу. На этой странице мы должны подтвердить, что данные, полученные на предыдущей странице, соответствуют данным, показанным на 2-й странице. Наша проблема в том, что когда тест переходит на 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.

Мы подозревали, что это может быть связано с асинхронизацией, но это не так. тест переходит на страницу 2 после сохранения переменной со страницы 1, поэтому мы не понимаем, почему это происходит. Как мы можем это исправить и использовать переменные для утверждения?

2 ответа

up 2 down accepted

Проблема в том, что вы указали 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();
up 0 down

на самом деле, следующая часть вызывает проблему. Как только мы удалили эту часть, тест работает нормально.

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