javascript - 如何处理 Protractor 中的 UnexpectedAlertOpenError

标签 javascript automation gulp protractor

我正在从事网站的自动化工作,但遇到了一个特殊问题。 我在 gulp 上使用 Protractor 来运行自动化测试,并且在 gulp 任务中包含一个报告生成器。

手头的问题如下: 每当 chrome 触发警报时,protractor 就会停止并在控制台中抛出“UnexpectedAlertOpenError”,从而停止测试运​​行并取消报告生成。

我想知道是否有办法让规范失败并继续运行套件的其余部分。

我知道你可以这样做:

browser.get(url).catch(function () {

    return browser.switchTo().alert().then(function (alert) {

      alert.accept();
      return browser.get(url);

    });
  });

但我不希望 Protractor 关闭警报并继续,我想在它出现的地方使测试失败,并返回一条错误消息以继续运行。

有什么办法吗?是否可以将异常传递给 catch 函数并返回消息?我找不到有关该 catch 方法的任何文档。

谢谢!

编辑:在控制台上查看堆栈跟踪后,我发现 Protractor 检测到好像规范失败了,当它试图截取屏幕截图时,异常来自记者(我正在使用 Protractor -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 中断并阻止生成报告。

我为解决这个问题所做的是从他们的存储库中 fork 并在尝试截取屏幕截图之前确认警报是否打开并避免截取屏幕截图,如果它是:

  function alertIsPresent() {
    return browser.driver.switchTo().alert()
     .then(function (alert) {
       alert.accept();
       return true;
       }, function (err) {
      return false;
     });
  };

如果它是打开的,我会关闭它并继续而不截图,否则就截图。 通过这样做,报告会正确生成,并在下一个规范报告中记录有打开的警报。

希望这对某人有帮助。

最佳答案

我遇到过类似的问题。搜索了几个小时,终于找到了这个:

unexpectedAlertBehaviour: 'accept'

参见 https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#read-write-capabilities了解更多信息。您基本上创建了一个 capabilities 对象并将所需的值传递给它:

capabilities: {
    browserName: "chrome",
    unexpectedAlertBehaviour: 'accept',
    chromeOptions: {
        args: ["--window-size=1920,1080", "--disable-gpu"],
    },
},

希望这对您有所帮助!

关于javascript - 如何处理 Protractor 中的 UnexpectedAlertOpenError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468821/

相关文章:

javascript - 使用jquery将选定的字段放入textarea

javascript - 如何测试某些字符是否在 Javascript 字符串的某些部分

javascript - gulp-concat 文件中的 typescript

node.js - 在哪里安装gulp?

javascript - gulp 记者归档

javascript - 需要从 toDos 数组中删除 delItem 不知道如何

javascript - 让事件监听器触发

c# - Selenium Web Driver 点击

java - 如何使用验证从命令行运行 cucumber junit 项目

automation - 自动将 Microsoft Visio 绘图 (vsd) 转换为 PDF