#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 ")"); } }