Внутренние отчеты и обработка ошибок

Я начал читать об автоматизированном тестировании веб-приложений пару дней назад и после множества проб и ошибок (и учебник), наконец, каким-то образом удалось запустить пару функциональных тестов 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>

person Slavenko Miljic    schedule 21.12.2015    source источник


Ответы (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) и строке неудавшегося теста (строка tests/functional/index.js). 12 столбец 6). Трудно дать больше информации, чем это! Если вы не видите эту информацию, возможно, у вас есть неправильная конфигурация системы, хотя я не знаю, что это может быть (действительно старый или глючный Node.js? Chrome 39, безусловно, древний).

person C Snover    schedule 21.12.2015
comment
Ну, это вся информация, которую я получил. Я отредактировал свой вопрос, включив в него полный стек, я использовал файлы конфигурации из официального руководства, а версия узла — v4.2.3. Я наверное что-то не так делаю в самом тесте, может надо как-то явно выкинуть ошибку на строку findDisplayedByCssSelector - person Slavenko Miljic; 22.12.2015
comment
По крайней мере, теперь я знаю, какого ответа мне следует ожидать, я постараюсь разобраться в этом подробнее. Спасибо. - person Slavenko Miljic; 22.12.2015