ПРОБЛЕМА: Не удается прочитать свойство ‘getText’ неопределенного

#javascript #node.js

#javascript #node.js

Вопрос:

Я создал это, чтобы протестировать отчеты на основе csv-файлов, содержащих данные, но я сталкиваюсь с этой ошибкой «Не удается прочитать свойство ‘getText’ undefined» . Пожалуйста, сообщите спасибо. Ниже приведен мой код

 testReport: async function (driver, dataFile) {
        var data = await csv({ noheader: true, output: "csv" }).fromFile("./admin/data/"   dataFile);
        var trs = await driver.findElements(By.css('.qa-report', 'tbody', 'tr'));
        //trs.shift(); // remove first tr - it's the header row
        var errors = [];
        for (var i in data) {
            var row = data[i];
            var tds = await trs[i].findElements(By.tagName('td'));
            for (var j in row) {
                var csvData = data[i][j];
                var siteData = await tds[j].getText();
                if (siteData != csvData) {
                    errors.push("["   i   ","   j   "] - expected("   csvData   ") got("   siteData   ")");
                }
            }
        }

        if (errors.length > 0) {
            errorMessage = "Cells failed to validate:";
            for (var i in errors) {
                errorMessage  = "n"   errors[i];
            }
            throw new Error(errorMessage);
        }
    },
  

Комментарии:

1. Добро пожаловать в stack overflow. j не используется для перебора tds , оно используется для перебора row . вот почему.

2. вместо for (var j in row) { попытки for (var j in tds) {

Ответ №1:

Ваши итераторы выглядят немного испорченными (как уже было прокомментировано)

попробуйте for (var j in tds) { вместо for (var j in row) {

Я предполагаю, что у вас больше строк результатов, чем столбцов в строке. Если у вас все еще возникают проблемы, опубликуйте определения классов для findElements или By которых мы не знаем.

Комментарии:

1. хорошо, я исправил цикл, но теперь он выдает «Не удается прочитать свойство ‘findElements’ неопределенного типа» не уверен, почему? or (var j in tds) { var csvData = data[i][j]; var siteData = await tds[j].getText(); if (siteData != csvData) { errors.push("[" i "," j "] - expected(" csvData ") got(" siteData ")"); } }