Я использую электронную таблицу 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.