Как получить значения из сетки и выполнить суммирование в PROTRACTOR - PullRequest
0 голосов
/ 09 ноября 2018

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

Revenue Header

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

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

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

1 Ответ

0 голосов
/ 09 ноября 2018

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

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): * В вашем случае обработайте строку перед преобразованием в Числовое, убедитесь, что вы отправляете только цифры

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

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

...