Внутренняя отчетность и обработка ошибок
Я начал читать об автоматизированном тестировании веб-приложений пару дней назад, и после большого количества проб и ошибок (и учебника), наконец, каким-то образом удалось запустить пару функциональных тестов Intern как локально, так и на BrowserStack, но одна вещь, которую я не могу Оберните мою голову отчетом.
Например, у меня есть простой тест, который заполняет некоторые данные страницы входа в систему, отправляет форму и проверяет, все ли в порядке.
Код может выглядеть примерно так:
define(function (require) {
var registerSuite = require('intern!object');
var assert = require('intern/chai!assert');
var fs = require('intern/dojo/node!fs');
registerSuite({
name: 'index',
'Log in test': function () {
var user = 'username';
var pass = 'pAsssWord';
return this.remote
.get(require.toUrl('http://localhost/MyApp/'))
.setFindTimeout(20000)
//fill in username
.findDisplayedByCssSelector('#panelUsernamePassword .usernameField')
.click()
.clearValue()
.type(user)
.end()
//fill in password
.findDisplayedByCssSelector('#panelUsernamePassword .passwordField')
.click()
.clearValue()
.type(pass)
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("after-data-filled.png", data, 'base64');
})
//click login button
.findDisplayedByCssSelector('#panelUsernamePassword button')
.click()
.end()
.sleep(500)
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("after-login-pressed.png", data, 'base64');
})
//click popup close button
.findDisplayedByCssSelector('div[id$="close-button"]')
.click()
.end()
.sleep(500)
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("no-popup.png", data, 'base64');
})
.end();
}
});
});
После запуска intern-runner config=tests/intern.js
тест пройдет, и у меня будет в окне консоли что-то вроде
Listening on 0.0.0.0:9000
Tunnel started
‣ Created session chrome 39 on WINDOWS (c7873066-b185-4025-a93a-829ea0fdb364)
✓ chrome 39 on WINDOWS - index - Log in test (15.393s)
No unit test coverage for chrome 39 on WINDOWS
chrome 39 on WINDOWS: 0/1 tests failed
Хорошо, если тест пройден, мне не нужно много информации, все хорошо, но с другой стороны, если в тесте у меня есть что-то вроде:
.findDisplayedByCssSelector('#thisIsSomethingThatIsNotOnThePage')
Единственная информация о сбое, которую я получаю:
NoSuchElement: An element could not be located on the page using the given search parameters.
Есть ли способ узнать, какой элемент на странице не найден? Может я что то не так делаю?
Спасибо
РЕДАКТИРОВАТЬ:
Полная сводка ошибок:
× chrome 47 on WINDOWS - index - Log in test
NoSuchElement: An element could not be located on the page using the given search parameters.
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\leadfoot\lib\findDisplayed.js:37:21>
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:393:15>
at run <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:237:7>
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\nextTick.ts:44:3>
at doNTCallback0 <node.js:419:9>
at process._tickCallback <node.js:348:13>
at Command.findDisplayed <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\leadfoot\Command.js:23:10>
at Command.prototype.(anonymous function) [as findDisplayedByCssSelector] <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\leadfoot\lib\strategies.js:28:16>
at Test.registerSuite.Log in test [as test] <tests\functional\index.js:21:6>
at <..\..\AppData\Roaming\npm\node_modules\intern\lib\Test.js:211:24>
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:393:15>
at runCallbacks <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:11:11>
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:317:4>
at run <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\Promise.ts:237:7>
at <..\..\AppData\Roaming\npm\node_modules\intern\node_modules\dojo\nextTick.ts:44:3>
at doNTCallback0 <node.js:419:9>
1 ответ
Я не знаю, как вы говорите, это единственная информация, которую вы получаете об ошибке. Трассировка стека для ошибок, которая отображается непосредственно под вставленным вами сообщением об ошибке, будет содержать точную строку в вашем тесте, которая вызвала ошибку. Сообщение об ошибке также включает в себя параметры, которые были отправлены на сервер, где указано, какой именно элемент был найден. Например, я просто запустил тест, чтобы продемонстрировать нормальный вывод ошибок:
Listening on 0.0.0.0:9000
Tunnel started
‣ Created session firefox on any platform (fb89e8af-73d6-4c90-bfe7-82820bf6e312)
× firefox on any platform - error handling demo (1.34s)
NoSuchElement: [POST http://localhost:4444/wd/hub/session/fb89e8af-73d6-4c90-bfe7-82820bf6e312/element / {"using":"css selector","value":".missing"}] Unable to locate element: {"method":"css selector","selector":".missing"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: [redacted]
Driver info: driver.version: unknown
at ProxiedSession._post <node_modules/intern/node_modules/leadfoot/Session.js:59:30>
at ProxiedSession.Session.find <node_modules/intern/node_modules/leadfoot/Session.js:1055:15>
[…]
at Test.registerSuite.greeting form [as test] <tests/functional/index.js:12:6>
[…]
Как видите, сообщение об ошибке от Intern содержит явную информацию о сбое конечной точки (/element
) запрос не удался (.missing
с помощью селектора CSS), и строка теста, который не удался (test /functions /index.js строка 12, столбец 6). Трудно дать гораздо больше информации, чем это! Если вы не видите эту информацию, то, возможно, у вас какая-то неправильная конфигурация системы, хотя я не знаю, что это может быть (действительно старый или глючный Node.js? Chrome 39, безусловно, древний).