2015-12-21 68 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. 

有没有办法知道在页面上哪一个元素是不是发现了什么?也许我做错了什么?

谢谢

编辑:

完整的错误总结:

× 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选择器)以及失败的测试行(tests/functional/index.js第12行第6列)。很难提供比这更多的信息!如果您没有看到这个信息,那么你可能有一些错误配置的系统,虽然我不知道是什么,可能是(真的老了或者有缺陷的Node.js?Chrome 39以上肯定是古代的)。

+0

嗯,这是所有的信息,我得到的。我编辑了我的问题以包含完整的堆栈,我使用了官方教程中的配置文件,节点版本是v4.2.3。我可能在测试本身做了错误的事情,也许我需要以某种方式在'findDisplayedByCssSelector'行 –

+0

上明确地抛出一个错误。至少,现在我知道我应该期待什么样的响应,我会试着研究一下这更进一步。谢谢。 –