【发布时间】:2020-02-12 12:12:13
【问题描述】:
我一直在尝试捕捉并抛出这个错误,认为这可能是问题所在,但测试仍然通过。我不知道如何捕捉/抛出这个(如果这是问题的话),所以当断言失败时测试将失败。
错误消息 -
UnhandledPromiseRejectionWarning: AssertionError: expected '25' to equal '2500'
at selectElement.getText.then
...
1 scenario (1 passed)
13 steps (13 passed)
这是我的代码 特征码
Then(/^I verify the below options are correct:$/, async (coverageTable: TableDefinition) => {
async function processArray2(array) {
let ArrayList;
let firstLetterlowerEl;
let actualList;
for (let i = 0; i < array.rows().length; i++) {
ArrayList = Coverage_Defaults[array.rows()[i][0]][array.rows()[i][1]];
firstLetterlowerEl = await array.rows()[i][0].charAt(0).toLowerCase() + array.rows()[i][0].slice(1);
actualList = await coveragesAuto[firstLetterlowerEl].elementId;
await assertions.assertDropDownSelectedValue(actualList,ArrayList);
}
});
断言代码
public assertDropDownSelectedValue = async (elementId: string, expectedText: string, override?: string) => {
try {
let selectElement = override === 'xpath' ? element(by.xpath(elementId)).$('option:checked') : element(by.id(elementId)).$('option:checked');
await selectElement.getText()
.then((text: any) => expect(text).to.equal(expectedText)).catch(Err => {throw Err.stack})
} catch (Err) {
if (Err instanceof error.NoSuchElementError) {
log.error(`${elementId} Element not found error \n ${Err.stack}`);
throw Err.stack;
} else if (Err instanceof error.ElementNotSelectableError) {
log.error(Err.stack);
throw Err.stack;
} else {
log.error(`Dropdown selected option does NOT match with expected text - elementId passed : ${elementId}`);
throw Err;
}
}
}
【问题讨论】:
-
我应该注意,如果我直接调用 await assertions.assertDropDownSelectedValue(actualList,ArrayList) 而不使用 for 循环,它可以正常工作(正确失败)。我需要 for 循环的原因是我希望能够遍历表中的每个值数组并将其与下拉列表的值进行比较。
标签: typescript async-await protractor cucumber try-catch