我可以处理量角器测试的特定茉莉花错误吗?
Can I handle a particular jasmine error for protractor tests?
我们有一些监控测试按计划连续执行,有时由于未知的网络相关错误而失败。
修复随机网络错误是首要任务,但同时我正在考虑优雅地处理此类错误 - 无论是在 Protractor 还是 jasmine 上。
错误消息总是一样的,所以我想知道是否有办法通过量角器配置文件或其他地方处理该错误?
例如:
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)
感谢@alecxe 在跟踪日志中提供的线索。可能很基础,但仍然想回答并希望对某人有所帮助。
因为我使用的是 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);
};
我们有一些监控测试按计划连续执行,有时由于未知的网络相关错误而失败。
修复随机网络错误是首要任务,但同时我正在考虑优雅地处理此类错误 - 无论是在 Protractor 还是 jasmine 上。
错误消息总是一样的,所以我想知道是否有办法通过量角器配置文件或其他地方处理该错误?
例如:
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)
感谢@alecxe 在跟踪日志中提供的线索。可能很基础,但仍然想回答并希望对某人有所帮助。
因为我使用的是 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);
};