我能为量角器测试处理一个特殊的茉莉花错误吗

Can I handle a particular jasmine error for protractor tests?

本文关键字:一个 茉莉花 错误 量角器 测试 处理      更新时间:2023-09-26

我们有一些监控测试,它们按计划连续执行,有时由于未知的网络相关错误而失败。

修复随机网络错误是首要任务,但与此同时,我正在考虑优雅地处理这种错误——无论是在量角器上还是在茉莉花上。

错误消息总是一样的,所以我想知道是否有办法通过量角器配置文件或其他地方来处理这个错误?

例如:

expect(obj1).isEqual(obj2)

当出现真正的故障时,jasmine会发出类似的错误信息

obj1 is not equal to obj2

当出现具有一致消息的随机网络错误时,jasmine会打印出看起来像的错误

Unable to connect to network. It may be busy now so please try later (example message)

我想覆盖所有的jasmine错误,只忽略示例消息的失败报告。

错误跟踪日志:

Stacktrace:
 UnknownError: <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
            <html>
            <head>
            <title>*** Web Proxy</title>
            <LINK REL ="stylesheet" TYPE="text/css" HREF="http://xdddd.com/cacheflow/errors.css" TITLE="Style">
            </head>
            <body bgcolor="#ffffff">
            <table width="100%" border="0" cellpadding="1" cellspacing="0" bgcolor="#ccccff">
                    <tr><td><font size="-3"> </font></td></tr> 
                    <tr><td valign="middle">
                            <h2>  <img SRC="http://home.xx.com/art/logos/black_51x51.gif" ALT="XXXXXXXX" border="0" height="51" width="51">   Web Proxy Error - TCP Error 503</h2> <hr size="1" color="black"> </td>
                    </tr>
            </table>
            <br>
            <font color=red><b>XXXXXXXXX.com</b></font><p>
            The Firm's web proxy could not contact the web server in the URL above.  This can happen when the web
            server is down, too busy, or is unreachable on the Internet.  Try the server again later. If you receive
            this message for many URLs, please contact your local helpdesk to report the problem.
            <font size="-1"><br><br><br>
            Reporting proxy: uxxxxxx.com<br><br>
             Copyright 2000 - The XXXXXXXX, Inc. - All rights reserved.
            </font>
            </body>
            </html>
    at new bot.Error (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'atoms'error.js:108:18)
    at Object.bot.response.checkResponse (h:'Projects'mdddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'atoms'response.js:106:11)
    at h:'Projects'xxxxxxx'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'webdriver'webdriver.js:379:20
    at [object Object].promise.ControlFlow.runInFrame_ (eval at <anonymous> (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:1857:20)
    at [object Object].goog.defineClass.notify (eval at <anonymous> (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:2448:25)
    at [object Object].promise.Promise.notify_ (eval at <anonymous> (h:'Projects'dddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:564:12)
    at Array.forEach (native)
    at [object Object].promise.Promise.notifyAll_ (eval at <anonymous> (h:'Projects'dddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:553:15)
    at [object Object].goog.async.run.processWorkQueue [as _onTimeout] (h:'Projects'ddddddn'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'async'run.js:130:15)
Error
    at [object Object].ElementArrayFinder.applyAction_ (h:'Projects'dddddd'web'private-site'node_modules'protractor'lib'element.js:392:21)
    at [object Object].self.(anonymous function) [as isDisplayed] (h:'Projects'dddddd'web'private-site'node_modules'protractor'lib'element.js:76:19)
    at [object Object].self.(anonymous function) [as isDisplayed] (h:'Projects'dddddd'web'private-site'node_modules'protractor'lib'element.js:721:11)
    at [object Object].expectHomePage (h:'Projects'ddddddd'web'private-site'test-common'page-objects'learning-center.js:10:20)
    at h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'jasminewd'index.js:94:14
    at [object Object].promise.ControlFlow.runInFrame_ (eval at <anonymous> (h:'Projects'dddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:1857:20)
    at [object Object].promise.ControlFlow.runEventLoop_ (eval at <anonymous> (h:'Projects'dddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:1729:8)
    at [object Object].eval (eval at <anonymous> (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'base.js:1124:19), <anonymous>:2043:12)
    at [object Object].goog.async.run.processWorkQueue [as _onTimeout] (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'selenium-webdriver'lib'goog'async'run.js:130:15)
From: Task: Asynchronous test function: it()
    at [object Object].<anonymous> (h:'Projects'dddddd'web'private-site'node_modules'protractor'node_modules'jasminewd'index.js:93:33)
    at [object Object].<anonymous> (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'async-callback.js:45:37)
    at [object Object].jasmine.Block.execute (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:1174:17)
    at [object Object].jasmine.Queue.next_ (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:2209:31)
    at [object Object]._onTimeout (h:'Projects'dddddddn'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:2199:18)
Error
    at [object Object].<anonymous> (h:'Projects'ddddddd'web'private-site'test-monitoring'specs'learning-center.spec.js:11:5)
    at [object Object].jasmine.Env.describe_ (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:913:21)
    at [object Object].jasmine.Env.describe (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:898:15)
    at describe (h:'Projects'ddddddd'web'private-site'node_modules'protractor'node_modules'minijasminenode'lib'jasmine-1.3.1.js:658:27)
    at Object.<anonymous> (h:'Projects'ddddddd'web'private-site'test-monitoring'specs'learning-center.spec.js:5:1)

感谢@alexe在跟踪日志中提供线索。可能是基本的,但仍然想回答,希望能帮助到别人。

由于我使用Jasmine 1.3,我在minijasminenode''lib''Jasmine-1.3.1.js中找到了许多地方可以覆盖故障,但我发现覆盖的最佳位置如下:

jasmine.Spec.prototype.fail = function (e) {
  if(e.message && e.message.indexOf('timed out after')>=0) {
    console.log("EXCEPTION MSG " + JSON.stringify(e, null, 4));
    var expectationResult = new jasmine.ExpectationResult({
      passed: true,
      message: 'Skipped for proxy error',
      trace: { stack: e.stack }
    });
  }
  else {
    var expectationResult = new jasmine.ExpectationResult({
      passed: false,
      message: e ? jasmine.util.formatException(e) : 'Exception',
      trace: { stack: e.stack }
    });    
  }
  this.results_.addResult(expectationResult);
};