【发布时间】:2017-05-19 00:56:35
【问题描述】:
我正在研究网站的自动化,但遇到了一个特定问题。 我在 gulp 上使用量角器来运行自动化测试,并且在 gulp 任务中还包含一个报告生成器。
目前的问题如下: 每当 chrome 触发警报时,量角器停止并在控制台中抛出“UnexpectedAlertOpenError”,停止测试运行并取消报告生成。
我想知道是否有办法使规范失败并继续运行套件的其余部分。
我知道你可以这样做:
browser.get(url).catch(function () {
return browser.switchTo().alert().then(function (alert) {
alert.accept();
return browser.get(url);
});
});
但我不希望量角器关闭警报并继续,我想在它出现的地方失败,并返回错误消息以继续运行。
有没有办法做到这一点?是否可以将异常传递给 catch 函数并返回消息?我找不到任何关于该 catch 方法的文档。
谢谢!
编辑:在控制台上查看堆栈跟踪后,我发现量角器检测到好像规范失败了,并且当它尝试截屏时异常来自报告器(我正在使用量角器-jasmine2 -html-记者) 我将粘贴一些堆栈跟踪,以防有人能弄清楚,我真的迷路了。
E/launcher - UnexpectedAlertOpenError: unexpected alert open: {Alert text : You have pending changes}
From: Task: WebDriver.takeScreenshot()
EDIT2:我发现我的实现存在真正的问题。 npm 插件 protractor-jasmine2-html-reporter(我正在使用)试图在警报打开时截取屏幕截图,导致 webdriver 中断并阻止生成报告。
我解决这个问题的方法是从他们的存储库中分叉,然后在尝试截屏之前确认警报是否已打开,如果是则避免截屏:
function alertIsPresent() {
return browser.driver.switchTo().alert()
.then(function (alert) {
alert.accept();
return true;
}, function (err) {
return false;
});
};
如果它是打开的,我会关闭它并继续而不截图,否则截图。 通过这样做,报告会正确生成,并在下一个规范报告中记录有打开的警报。
希望这对某人有帮助。
【问题讨论】:
标签: javascript automation gulp protractor