По-видимому, поиск данных транспортира выполняет ПОСЛЕ выхода из системы - PullRequest
0 голосов
/ 27 сентября 2019

Я использую электронную таблицу Excel для хранения серии уникальных номеров испытаний и их статуса «Не используется» / «Использовано».Мне нужен тестовый сценарий для доступа к электронной таблице и возврата первого номера теста, который не использовался.

Все разделы кода работают так, как задумано, за одним исключением.Выбранный номер теста появляется для выбора ПОСЛЕ того, как остальная часть тестового сценария выполняется и выходит из системы.

Я новичок в Protractor, поэтому кто-то может объяснить, в простых терминах, что мне нужно сделать, чтобы получить вызываемыйметод (userHelper.retrieveTestNumber) для возврата значения номера теста ДО выполнения шага проверки?

Я пытался использовать прямое зацикливание, рекурсивное зацикливание, вызовы нескольких методов и вложенные операторы .then, новсе, что я пробовал, приводит к тому же вопросу.Выбранное значение не возвращается в вызывающий блок «it», и вызов для чтения электронной таблицы, по-видимому, выполняется ПОСЛЕ того, как остальная часть сценария завершена.В результате глобальная переменная, которая мне нужна для последующих этапов тестирования, остается пустой.(Я знаю, что блок проверки является поддельным. Это был всего лишь тест, чтобы увидеть, действительно ли установлена ​​глобальная переменная.)

Файл «spec» содержит шаги теста для выполнения:

  const page: HomePage = new HomePage();
  const userHelper = new UserHelper();
  const loginPage = new LoginPage();

  let strTestNumber = "";

  beforeAll(() => {
    browser.ignoreSynchronization = true;
    loginPage.login();
    page.home();
  });

  it('Title is displayed', () => {
    page.getTitleText().then((text: string) => {
      expect(text).toEqual('Title');
    });
  });

  it('Navigation menus are displayed', () => {
    page.getTestNavigationMenu().then((text: string) => {
      expect(text).toEqual('Test Link');
    });
  });

  it('Welcome Message is displayed', () => {
    page.getWelcomeMessage().then((text: string) => {
      expect(text).toEqual('Welcome to the Application Under Test');
    });
  });

  it('Begin Excel File Operations', function () {
    strTestNumber = userHelper.retrieveTestNumber();

    console.log("        strTestNumber = '" + strTestNumber + "'");
  });

  it('Verify the Test Number was retrieved', () => {
    console.log("        strTestNumber is now set to '" + strTestNumber + "'");
    expect(strTestNumber).toEqual(strTestNumber);
  });


  afterAll(() => {
    loginPage.logOut();
  });
});

Файл «помощник» содержит метод для чтения электронной таблицы:


const datafile = "apps/src/data/TestNumbers.xlsx";

export class UserHelper {

  retrieveTestNumber(): string {
    var wb: Workbook = new Workbook();
    let row = 2;
    let strTestNumber = "";

    // Read the first row
    wb.xlsx.readFile(datafile);

    wb.xlsx.readFile(datafile)
      .then(function (testNumber: any) {
        let sheet: Worksheet = wb.getWorksheet("Test Numbers");

        let rowObject: Row = null;
        let cellObject: Cell = null;
        let cellStatus: Cell = null;
        let nbrStatus: any;

        while (strTestNumber === "") {
          rowObject = sheet.getRow(row);

          cellObject = rowObject.getCell(1);
          cellStatus = rowObject.getCell(2);

          console.log("        cellObject is '" + cellObject.value + "'");
          console.log("        cellStatus is '" + cellStatus.value + "'");

          nbrStatus = cellStatus.value.toString();

          if (cellStatus.value === null)
            nbrStatus = "Done";

          if (nbrStatus === "Not Used") {
            console.log("        setting strTestNumber to '" + cellObject.value.toString() + "'");
            strTestNumber = cellObject.value.toString();
            return strTestNumber;
          }
          else if (nbrStatus === "Done") {
            console.log("        *** All test numbers have been used ***");
            strTestNumber = "Fault";
            break;
          }

          row++;
        }
        return testNumber;
      })

    console.log("        Returning strTestNumber '" + strTestNumber + "'");
    return strTestNumber;
  };
}

Электронная таблица содержит два столбца.Номер теста и статус:

Number     Status
98110001   Used
98110002   Used
98110003   Used
98110004   Used
98110005   Used
98110006   Used
98110007   Not Used
98110008   Not Used
98110009   Not Used
98110010   Not Used

Я ожидал, что глобальная переменная "strTestNumber" будет установлена ​​и затем проверена, но, как вы можете видеть из тестового прогона ниже, она остается пустой.Фактический прогон отображает это:

Jasmine started
Logging in as a test user.

  Test Protractor Excel Functions
    √ Title is displayed
    √ Navigation menus are displayed
    √ Welcome Message is displayed
        Returning strTestNumber ''
        strTestNumber = ''
    √ Begin Excel File Operations
        strTestNumber is now set to ''
    √ Verify the Test Number was retrieved
Logging Out
        cellObject is '98110001'
        cellStatus is 'Used'
        cellObject is '98110002'
        cellStatus is 'Used'
        cellObject is '98110003'
        cellStatus is 'Used'
        cellObject is '98110004'
        cellStatus is 'Used'
        cellObject is '98110005'
        cellStatus is 'Used'
        cellObject is '98110006'
        cellStatus is 'Used'
        cellObject is '98110007'
        cellStatus is 'Not Used'
        setting strTestNumber to '98110007'

Executed 5 of 1608 specs INCOMPLETE (1603 SKIPPED) in 31 secs.
...