Как получить значения из сетки и выполнить суммирование в PROTRACTOR

Я совершенно новичок в Protractor и Javascript. Я пытаюсь написать тестовый скрипт, который может получать значения некоторых учетных записей под заголовком "Доход" (изображение ниже)

Заголовок дохода

Мне нужно получить все числовые значения, указанные в заголовке "Доход", и выполнить операцию "СУММА". Проблема в том, что я не могу получить все значения, используя цикл или ng-repeat, Ниже показано, как выглядит моя DOM:Доход ДОМ

У меня есть 89 td/tr теги под tbody как показано на картинке выше.

Может ли кто-нибудь помочь мне с логикой того, как я могу получить все значения, используя tbody и выполнить операции SUM для извлеченных значений?

1 ответ

С этим у вас будет то, что вы хотите:

function sumValueInColumn(tableID, columnNumber, expectedResult){
    var expectedCells = element.all(by.css('#'+tableID+' tr td:nth-of-type(2)'));
    var currentSum = 0;
    expectedCells.each((eachCell) => {
        eachCell.getText().then((cellText) => {                            
            currentSum += Number(cellText);
        });
    }).then(() => {
        expect(currentSum.toString()).toEqual(expectedResult);
    });
}//END OF sumValueInColumn

Итак, я буду объяснять построчно

в этой строке вы фиксируете все значения столбцов из таблицы и определенного столбца. Замените var tableID на id (или другой селектор css) вашей таблицы, кодовая часть 'nth-of-type(2)' относится к столбцам, так что в вашем случае это номер 2 для второго столбца... вы можете сделайте что-то вроде этого, чтобы можно было получить значение из параметра функции:

var expectedCells = element.all(by.css('#'+tableID+' tr td:nth-of-type('+columnNumber+')'));

Итак, теперь переменная Ожидаемые ячейки имеет массив всех чисел (в виде строки).

В этой части вы получаете массив, получаете текст каждой позиции, преобразуете в Numeric и выполняете математическую операцию, которую вы хотите (sum): * В вашем случае, работайте со строкой перед преобразованием в Numeric, убедитесь, что вы отправка только номеров

    expectedCells.each((eachCell) => {
        eachCell.getText().then((cellText) => {                            
            currentSum += Number(cellText);
        });
    })

Последняя часть представляет собой последовательность обещаний, которая позволит вам использовать переменную currentSum и сравнивать с ожидаемым значением (или просто делать что-то еще)

Другие вопросы по тегам