2015-12-21 12 views
0

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

OK , если тест проходит, мне не нужно много информации, все хорошо, но, с другой стороны, если в тесте у меня есть что-то вроде:

.findDisplayedByCssSelector('#thisIsSomethingThatIsNotOnThePage') 

только информацию я получить о недостаточности:

NoSuchElement: An element could not be located on the page using the given search parameters. 

Есть ли способ узнать, какой элемент на странице не найден? Может быть, я делаю что-то не так?

Спасибо

EDIT:

Полное резюме ошибка:

× 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> 
    […] 

Как вы можете видеть, сообщение об ошибке от стажера содержит полную информацию о конечной точке, что не удалось (/element) запрос, который не удался (.missing с помощью CSS-селектор) и строка неудачного теста (test/functional/index.js строка 12, столбец 6). Трудно дать гораздо больше информации, чем это! Если вы не видите эту информацию, у вас, вероятно, есть некорректная конфигурация системы, хотя я не знаю, что это может быть (действительно старый или багги Node.js? Chrome 39, безусловно, древний).

+0

Ну, это вся информация, которую я получаю. Я отредактировал свой вопрос, чтобы включить полный стек, я использовал файлы конфигурации из официального учебника, а версия узла - v4.2.3. Я, вероятно, что-то неправильно делаю в самом тесте, возможно, мне нужно как-то явно выбросить ошибку в строке 'findDisplayedByCssSelector' –

+0

По крайней мере, теперь я знаю, какого ответа я должен ожидать, я попытаюсь посмотреть это далее. Спасибо. –

Смежные вопросы