如何在量角器中处理 UnexpectedAlertOpenError

Alf*_*oza 6 javascript automation protractor gulp

我正在研究网站的自动化,但遇到了一个特定的问题。我在 gulp 上使用量角器来运行自动化测试以及 gulp 任务中包含的报告生成器。

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

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

我知道你可以这样做:

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

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

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

    });
  });
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

编辑:在控制台上查看堆栈跟踪后,我发现量角器检测到规范失败,并且当它尝试截取屏幕截图时报告器出现异常(我正在使用量角器-jasmine2-html-记者)我将粘贴一些堆栈跟踪,以防万一有人能找出一些东西,我真的迷路了。

 E/launcher - UnexpectedAlertOpenError: unexpected alert open: {Alert text : You have pending changes}

From: Task: WebDriver.takeScreenshot()
Run Code Online (Sandbox Code Playgroud)

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;
     });
  };
Run Code Online (Sandbox Code Playgroud)

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

希望这对某人有帮助。

jds*_*erk 12

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

unexpectedAlertBehaviour: 'accept'
Run Code Online (Sandbox Code Playgroud)

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

capabilities: {
    browserName: "chrome",
    unexpectedAlertBehaviour: 'accept',
    chromeOptions: {
        args: ["--window-size=1920,1080", "--disable-gpu"],
    },
},
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Bar*_*etV 2

您应该能够检查这些错误代码并通过 jasmine failed 函数强制失败

  browser.switchTo().alert().then(function(alert) {
    alert.accept();
  }, function(err) {
    if (err.code == webdriver.error.ErrorCode.UNEXPECTED_ALERT_OPEN) {
      fail('Fail this spec');
    }
  });
Run Code Online (Sandbox Code Playgroud)

  • 快速说明“webdriver.error.ErrorCode”已被弃用。 (3认同)