Транспортир: сохранить переменную вне функции getText()

Я хочу сохранить переменную вне функции getText(), чтобы я мог сопоставить ее со значениями, последними в тестах. Пример:

Файл объекта страницы:

this.numberOfAllLines = element(by.id('all_lines'));
this.tableCell = element(by.css('.table_results_lines'));
this.sumOfAllLinesText = element(by.id('sum_lines'));

Спецфайл:

var numberOfLines = '';
var newNumberOfLines = '';

describe(...
    it(...
        page.numberOfAllLines.getText().then(function(num) {
            numberOfLines = num;
        });

        newNumberOfLines = numberOfLines + 10;

        expect(page.tableCell.getText()).toEqual(newNumberOfLines);

        // doing some clicks

        expect(page.sumOfAllLinesText.getText()).toEqual(newNumberOfLines);
    });
});

На это нет ответа в Как мне вернуть ответ от асинхронный вызов?.


person jurijk    schedule 08.03.2017    source источник


Ответы (1)


Этот фрагмент кода newNumberOfLines = numberOfLines + 10 является асинхронным и будет выполняться еще до того, как произойдет присвоение numberOfLines = num;.

То, что вы делаете, правильно. Наличие глобальной переменной, которая содержит значение для сравнения. Но поместите код назначения внутри связанного обещания getText().

it(...
        page.numberOfAllLines.getText().then(function(num) {
            numberOfLines = num;
            newNumberOfLines = numberOfLines + 10;
        });  

        expect(page.tableCell.getText()).toEqual(newNumberOfLines);
person AdityaReddy    schedule 08.03.2017
comment
Я еще такой нуб. Спасибо, это решило мою проблему! - person jurijk; 08.03.2017
comment
Знаете ли вы, как я могу умножать значения из функций getText() в этом примере: page.numberOfAllLines.getText().then(function(num) { numberOfLines = num; }); page.winPrice.getText().then(function(price) { cost = price; }); priceSum = numberOfLines * cost; expect(page.tableCell.getText()).toEqual(priceSum); Возможно ли это вообще из-за асинхронной природы Protractor? - person jurijk; 08.03.2017
comment
Поместите это - priceSum = numberOfLines * cost во второй getText().then() - person AdityaReddy; 08.03.2017