我能为量角器测试处理一个特殊的茉莉花错误吗
Can I handle a particular jasmine error for protractor tests?
我们有一些监控测试,它们按计划连续执行,有时由于未知的网络相关错误而失败。
修复随机网络错误是首要任务,但与此同时,我正在考虑优雅地处理这种错误——无论是在量角器上还是在茉莉花上。
错误消息总是一样的,所以我想知道是否有办法通过量角器配置文件或其他地方来处理这个错误?
例如:
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);
};
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 用茉莉花测试一个角度的承诺
- 如何测试一个脚本,用茉莉花加载谷歌地图
- 茉莉花,“控制器”不是一个函数,没有定义
- 茉莉花单元测试模拟一个承诺
- 茉莉花测试一个承诺,然后功能
- 运行一个单一的规格与咕哝的contrib茉莉花
- 我能为量角器测试处理一个特殊的茉莉花错误吗
- 如何在茉莉花测试中创建一个监视日期的函数
- 如何在测试中重新配置一个茉莉花间谍
- TypeError: module不是一个函数茉莉花
- 拖延者-需要在违约行为和茉莉花保释之间找到一个快乐的办法