如何将Excel文件中的值存储到数组中进行测试

数码相机

我无法处理it()-Expect()与exceljs的readfile()函数一起使用。使用此代码,我得到以下错误:“ UnhandledPromiseRejectionWarning:错误:在没有当前规范时使用了'expect',这可能是因为异步测试超时”

我试着删除第一个it()并仅将Expect()与it()包围,但是随后“ hello2”没有出现,这意味着在这种情况下甚至没有读取excelsjs的readFile()。

这显然与承诺有关,以及如何处理承诺,但我只是无法找到解决方案。在此先感谢您的帮助。

import { AppPage } from './app.po';
import { browser, logging, element, by } from 'protractor'
import { Workbook, Row, Cell, Worksheet } from 'exceljs';

describe('E2E Tests', () => {

  const log4js = require('log4js');
  log4js.configure({
    appenders: { igwan: { type: 'file', filename: 'cheese.log' } },
    categories: { default: { appenders: ['igwan'], level: 'error' } }
  });

  const logger = log4js.getLogger('IGWAN');
  logger.level = 'trace';
  //console.log = (msg) => logger.trace(msg);

  let page = new AppPage();

  let wb: Workbook = new Workbook();
  let sheet: Worksheet;
  let rowObject: Row;
  let cellObject: Cell;
  let deviceName: string;
  let dataContainer: any[] = [];
  let dataContainer3: any[];
  let row: any[] = []

  browser.manage().timeouts().implicitlyWait(30000);
  page.navigateToPark();

  it('whatever man', () => {

  wb.xlsx.readFile('e2e/src/testsE2E.xlsx').then(() => {

    sheet = wb.getWorksheet("Eqpt");

    for (let k = 1; k <= sheet.rowCount; k++) {
      dataContainer.push([]);
    }

    for (let l = 1; l <= sheet.rowCount; l++) {
      rowObject = sheet.getRow(l);

      for (let m = 1; m <= sheet.columnCount; m++) {
        cellObject = rowObject.getCell(m);
        dataContainer[l - 1].push(cellObject.toString());
      }
    }
    console.log("hello2");

    return dataContainer;

  }).then((result) => {

    dataContainer3 = result;
    console.log(dataContainer3);

    for (let i = 0; i < dataContainer3.length; i++) {
      row = dataContainer3[i];

      if (row[0].toString() === "1") {
        deviceName = row[1];

        element(by.id('device_input')).clear().then(() => {
          element(by.id('device_input')).sendKeys(deviceName);
        });
        element(by.id('search_button')).click();

        for (let j = 2; j <= row.length; j++) {
          switch (j) {
            case 2: {
              //it('should fetch and display correct type data for device ' + deviceName.toString(), () => {
                expect(element(by.id('type')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 3: {
              //it('should fetch and display correct POP data for device ' + deviceName.toString(), () => {
                expect(element(by.id('pop')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 4: {
              //it('should fetch and display correct ipMngt data for device ' + deviceName.toString(), () => {
                expect(element(by.id('ipMngt')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 5: {
              //it('should fetch and display correct internalState data for device ' + deviceName.toString(), () => {
                expect(element(by.id('internalState')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 6: {
              //it('should fetch and display correct prodState data for device ' + deviceName.toString(), () => {
                expect(element(by.id('prodState')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 7: {
              //it('should fetch and display correct currentSwRelease data for device ' + deviceName.toString(), () => {
                expect(element(by.id('currentSwRelease')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 8: {
              //it('should fetch and display correct hwChassis data for device ' + deviceName.toString(), () => {
                expect(element(by.id('hwChassis')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 9: {
              //it('should fetch and display correct rfsNode data for device ' + deviceName.toString(), () => {
                expect(element(by.id('rfsNode')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 10: {
              //it('should fetch and display correct peId data for device ' + deviceName.toString(), () => {
                expect(element(by.id('peId')).getText()).toEqual(dataContainer[i][j]);
              //});
              break;
            }
          }
        }
      } else {
        console.log("Line was marked as skipped by author of .xlsx file");
      }
    }

  });

});



    //sheet = wb.getWorksheet("POP");
    // TO DO

    //sheet = wb.getWorksheet("Clients");
    // TO DO

  afterEach(async () => {
    // Assert that there are no errors emitted from the browser
    const logs = await browser.manage().logs().get(logging.Type.BROWSER);
    expect(logs).not.toContain(jasmine.objectContaining({
      level: logging.Level.SEVERE,
    } as logging.Entry));
  });

});
尼菲

我建议您执行以下操作:

关闭量角器的控制流,并切换到异步/等待语法。不建议使用控制流功能,请参阅docs

以我的经验,了解控制流在幕后发生的事情比切换到异步/等待语法要困难得多。这将使您完全控制代码的执行方式。您可以通过添加SELENIUM_PROMISE_MANAGER: false到量角器配置文件来完成此操作。

因此,您的代码片段必须看起来像这样:

import { AppPage } from './app.po';
import { browser, logging, element, by } from 'protractor';
import { Workbook, Row, Cell, Worksheet } from 'exceljs';
import * as log4js from 'log4js';

describe('E2E Tests', () => {
  let wb: Workbook;
  let sheet: Worksheet;
  let rowObject: Row;
  let cellObject: Cell;
  let deviceName: string;
  let dataContainer: any[];
  let row: any[];
  let logger;

  beforeAll(async () => {
    log4js.configure({
      appenders: { igwan: { type: 'file', filename: 'cheese.log' } },
      categories: { default: { appenders: ['igwan'], level: 'error' } }
    });
    logger = log4js.getLogger('IGWAN');
    logger.level = 'trace';
  });

  beforeEach(async () => {
    const page = new AppPage();

    wb = new Workbook();
    dataContainer = [];
    row = [];

    await browser.sleep(5000);
    await page.navigateToPark();
  });
  //console.log = (msg) => logger.trace(msg);

  it('whatever man', async () => {
    dataContainer = await wb.xlsx.readFile('e2e/src/testsE2E.xlsx').then(() => {
      sheet = wb.getWorksheet('Eqpt');

      for (let k = 1; k <= sheet.rowCount; k++) {
        dataContainer.push([]);
      }

      for (let l = 1; l <= sheet.rowCount; l++) {
        rowObject = sheet.getRow(l);

        for (let m = 1; m <= sheet.columnCount; m++) {
          cellObject = rowObject.getCell(m);
          dataContainer[l - 1].push(cellObject.toString());
        }
      }
      console.log('hello2');

      return dataContainer;
    });

    for (let i = 0; i < dataContainer.length; i++) {
      row = dataContainer[i];

      if (row[0].toString() === '1') {
        deviceName = row[1];

        await element(by.id('device_input')).clear();
        await element(by.id('device_input')).sendKeys(deviceName);
        await element(by.id('search_button')).click();

        for (let j = 2; j <= row.length; j++) {
          switch (j) {
            case 2: {
              //it('should fetch and display correct type data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('type')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 3: {
              //it('should fetch and display correct POP data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('pop')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 4: {
              //it('should fetch and display correct ipMngt data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('ipMngt')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 5: {
              //it('should fetch and display correct internalState data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('internalState')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 6: {
              //it('should fetch and display correct prodState data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('prodState')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 7: {
              //it('should fetch and display correct currentSwRelease data for device ' + deviceName.toString(), () => {
              expect(
                await element(by.id('currentSwRelease')).getText()
              ).toEqual(dataContainer[i][j]);
              //});
              break;
            }
            case 8: {
              //it('should fetch and display correct hwChassis data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('hwChassis')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 9: {
              //it('should fetch and display correct rfsNode data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('rfsNode')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
            case 10: {
              //it('should fetch and display correct peId data for device ' + deviceName.toString(), () => {
              expect(await element(by.id('peId')).getText()).toEqual(
                dataContainer[i][j]
              );
              //});
              break;
            }
          }
        }
      } else {
        console.log('Line was marked as skipped by author of .xlsx file');
      }
    }
  });

  //sheet = wb.getWorksheet("POP");
  // TO DO

  //sheet = wb.getWorksheet("Clients");
  // TO DO

  afterEach(async () => {
    // Assert that there are no errors emitted from the browser
    const logs = await browser
      .manage()
      .logs()
      .get(logging.Type.BROWSER);
    expect(logs).not.toContain(
      jasmine.objectContaining({
        level: logging.Level.SEVERE
      } as logging.Entry)
    );
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将文本文件存储到2d int数组中

如何将arrayList存储到Java中的数组中?

如何将方法中的值存储到数组中?

将文件中的值存储到数组中

我如何将数组的内容存储到Powershell中的json文件中

如何将服务响应中的某些值存储到Angular 6中的数组?

如何将文本文件中的值存储到2D Numpy数组中?

如何将文件的值存储到Solarium中的变量中?

如何将文本文件中的值存储在Java数组中?

如何将混合类型文件中的整数存储到数组中?爪哇

如何将选定的值从UI存储到控制器中的数组?

如何将HTML dropdownlist的多个值存储到数组中,并使用PHP以逗号分隔它们?

如何将HDFS文件输入到R mapreduce中进行处理并将结果获取到HDFS文件中

如何将字典值从字典数组快速存储到数组中

如何将每个文本文件的内容存储到关联数组中?

您如何将整数存储到变量中并在Java中进行computeAvg?

如何将文件信息存储到数组中?

如何将很大的文本文件存储到数组中?

如何将CSV文件中的int值存储在单独的二维数组元素中

如何将数据集中的值存储到Matlab中的数组中

如何将先前的值存储到数组中

在 Matlab 中使用匿名 fnc 时如何将值存储到数组中以绘制它们

如何将键和值存储到数组存储?

如何将值存储在数组中并将它们保存在文件中

如何将 Python 列表存储到 Excel 文件?

当父表的值都存储到数组中时,如何将数组插入到联结表中?

如何将数组中重复的值的计数存储到 C++ 中的映射中?

如何将字符串值存储到php中的数组中?

如何将数字从文件存储到动态分类数组?