Я переключаю свой машинописный код в транспортире, чтобы использовать async / await, и у меня есть метод verifyRow, который, как мне кажется, не работает без обещаний .then
Пробовал использовать await внутри browser.wait, а также пробовалдобавление нового Promise в browser.wait, который вызывает метод asycn
findRowByMultipleCellText определяется как асинхронный метод, который возвращает число (т.е. rowIndex)
async verifyRow(columns: string[], values: string[], shouldFind = true, timeout = 60, refresh = false) {
let results: boolean = false;
const columnValueString: string = this.generateColumnValuesPrintString(columns, values);
// Wait for the row to exist based on shouldFind
// let rowIndex: number;
await this.driver.wait(() => {
return new Promise(resolve => {
this.findRowByMultipleCellText(columns, values).then((rowIndex: number) => {
if (rowIndex >= 0 && shouldFind === true) {
results = true;
logger.debug('Row EXISTS in the grid: \n' + columnValueString);
} else if (rowIndex <= -1 && shouldFind === false) {
results = true;
logger.debug("Row DOESN'T exist in the grid: \n" + columnValueString);
} else {
if (refresh === true) {
logger.info('Refreshing the vsphere web client main page');
new VClientMainPage().refreshButton.click();
}
}
});
resolve(results);
});
// return results;
}, timeout * 1000);
if (results === false) {
if (shouldFind === true) {
throw new Error("Row DOESN'T exist in the grid: \n" + columnValueString);
} else {
throw new Error('Row EXIST in the grid: \n' + columnValueString);
}
}
}
Я тоже пробовал это, ноошибка существует в await this.find для await можно вызывать только в асинхронных функциях
await this.driver.wait(() => {
let rowIndex: number = await this.findRowByMultipleCellText(columns, values);
if (rowIndex >= 0 && shouldFind === true) {
results = true;
logger.debug('Row EXISTS in the grid: \n' + columnValueString);
} else if (rowIndex <= -1 && shouldFind === false) {
results = true;
logger.debug("Row DOESN'T exist in the grid: \n" + columnValueString);
} else {
if (refresh === true) {
logger.info('Refreshing the vsphere web client main page');
new VClientMainPage().refreshButton.click();
}
}
}, timeout * 1000);
if (results === false) {
if (shouldFind === true) {
throw new Error("Row DOESN'T exist in the grid: \n" + columnValueString);
} else {
throw new Error('Row EXIST in the grid: \n' + columnValueString);
}
}
Мне нужно findRowByMultipleCellTest, чтобы вернуть число, которое происходит, если я вызываю его вне цикла ожидания. ЕСЛИ это> =0 мы вырываемся из цикла.
Что происходит, когда у меня есть код в новом Promise, он вызывает this.find, но он никогда не достигает точки, где он возвращает значение ... почти как этот код получаетподтолкнуть к концу стека, чтобы я никогда не вырвался