Я запускаю сценарии Protractor в среде Jasmine из Visual Studio Code V1.41.1, но, похоже, не могу выполнить код обработки ошибок. Похоже, что онлайн-справка указывает на формат, похожий на этот:
elm.isDisplayed().then(function() { /* passing case */}, function(err) { /* error handling here */})
Я пытался использовать этот тип формата в моем реальном сценарии, но не могу получить ожидаемые результаты. Насколько я вижу, это просто двоичный выбор ... Либо отображается заголовок, либо он НЕ отображается. Если он отображается, код проверяет, соответствует ли количество записей, отображаемых в таблице результатов, количеству записей, отображаемых в заголовке. Если он НЕ отображается, то отображается сообщение о том, что записи не найдены, и тест переходит к следующему блоку it . Я использую следующий код:
it(' Verified: Search results record count matches the expected total', function () {
let intTotalCount = 0;
let intRecordCount = 0;
// See if the Search Results "items in the list" header is displayed
reportPage.getResultHeaderIsDisplayed()
.then(function () {
reportPage.getResultCount()
.then(function (tCount: any) {
intTotalCount = tCount;
return intTotalCount;
})
.then(function (rCount: any) {
reportPage.getSRCount();
intRecordCount = rCount;
return intRecordCount;
})
.then(function () {
console.log(' Expect: ' + intRecordCount + ' = ' + intTotalCount);
if (!(intRecordCount === intTotalCount)) {
console.log('*** ERROR: Number of records DOES NOT match the expected total');
}
expect(intRecordCount).toEqual(intTotalCount);
})
}, function (msg) {
msg = "Records Not Found!"
console.log("\n *** " + msg + " ***\n");
})
});
Я использую специальные вызовы функций:
// PO File:
// Items Found Header:
resultHeader = element(by.xpath('//body//h5[not(@class="ng-hide")]'));
// Search Results Count:
public getResultHeaderIsDisplayed() {
this.browserHelper.wait('//h3[@class="panel-title"]', 'xpath');
return this.navigationHelper.isElementDisplayed(this.resultHeader);
}
// Navigation Helper:
async isElementDisplayed(ele: ElementFinder) {
return await ele.isDisplayed();
}
Если найдены результаты поиска, отображается ожидаемая информация таблицы и код работает просто отлично. Однако, если результаты не найдены, отображается красный баннер «Записи не найдены». То, что я пытался сделать sh, это просто отображение "Записи не найдены!" сообщение в окне вывода. Что я на самом деле получаю, так это (и ожидаемое сообщение НЕ отображается) ...
× Verified: Search results record count matches the expected total
- Failed: Wait timed out after 20420ms
at C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2201:17
at ManagedPromise.invokeCallback_ (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:1376:14)
at TaskQueue.execute_ (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:3084:14)
at TaskQueue.executeNext_ (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:3067:27)
at asyncRun (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2927:27)
at C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:668:7
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:189:7)
From: Task: <anonymous wait>
at scheduleWait (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2188:20)
at ControlFlow.wait (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2517:12)
at Driver.wait (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\webdriver.js:934:29)
at run (C:\Users\Ops-UI\node_modules\protractor\built\browser.js:59:33)
at ProtractorBrowser.to.(anonymous function) [as wait] (C:\Users\Ops-UI\node_modules\protractor\built\browser.js:67:16)
at BrowserHelper.wait (C:\Users\Ops-UI\apps\safe-e2e\src\helpers\browser.helper.ts:55:30)
at reportPage.getResultHeaderIsDisplayed (C:\Users\Ops-UI\apps\e2e\src\pageobjects\report.po.ts:1055:28)
at UserContext.<anonymous> (C:\Users\Ops-UI\apps\e2e\src\specs\verify-report.e2e-spec.ts:435:25)
at new ManagedPromise (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:1077:7)
at ControlFlow.promise (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2505:12)
at TaskQueue.execute_ (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:3084:14)
at TaskQueue.executeNext_ (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:3067:27)
at asyncRun (C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:2974:25)
at C:\Users\Ops-UI\node_modules\selenium-webdriver\lib\promise.js:668:7
From: Task: Run it(" Verified: Search results record count matches the expected total") in control flow
at runCallback (timers.js:810:20)
at tryOnImmediate (timers.js:768:5)
From asynchronous test:
Error
at Suite.<anonymous> (C:\Users\Ops-UI\apps\e2e\src\specs\verify-report.e2e-spec.ts:431:5)
at Object.<anonymous> (C:\Users\Ops-UI\apps\e2e\src\specs\verify-report.e2e-spec.ts:45:1)
at Module._compile (module.js:653:30)
at Module.m._compile (C:\Users\Ops-UI\node_modules\ts-node\src\index.ts:439:23)
at Module._extensions..js (module.js:664:10)
at Object.require.extensions.(anonymous function) [as .ts] (C:\Users\Ops-UI\node_modules\ts-node\src\index.ts:442:12) at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
Как вы можете видеть, я получаю дамп стека, который не говорит мне ничего, кроме того факта, что он пытался найти объект заголовка не смог его найти и истек тайм-аут после 20420 мс, но ожидаемое сообщение об ошибке игнорируется. Как избавиться от дампа стека и просто отобразить сообщение?