Webdriver IO - firefox 浏览器无法识别 browser.acceptAlert() 并显示它不是函数的错误

Webdriver IO - firefox browser doesn't recognize browser.acceptAlert() and shows error that it is not a function

我自动化了我需要验证点击按钮后浏览器警告是否对用户可见并且包含正确文本的场景。通常我使用 google chrome 并且我的解决方案适用于 chrome,打赌当我想在 firefox 上测试场景时,控制台抛出错误 TypeError: browser.isAlertOpen is not a function ,经过一些谷歌搜索我发现 isAlertOpen 仅适用于 Chrome 浏览器,但我找不到适用于 firefox 的任何内容。是否有任何解决方案如何做到它适用于两种浏览器? 我现在的代码

Steps.js

Then(/^I verify that alert is visible with text $/, async () => {
  await browser.waitUntil(() => browser.isAlertOpen());
  const msg = await browser.getAlertText();
  expect(msg).toEqual('Text on alert');
});

是的,没错。因为 isAlertOpen 方法是非官方且未记录的 Chromium 命令。此外,Firefox 没有类似的方法。但是,您可以创建一个函数来检查警报是否存在。

function isAlertPresent() {
  return async function() {
    try {
      await this.getAlertText();

      return true;
    } catch (error) {
      if (error.name === 'no such alert') {
        return false;
      } else {
        throw error;
      }
    }
  };
}

这是一个简单的函数,return 是另一个尝试获取警报文本的函数,如果它成功,那么它将 return 为真,如果没有警报,它将 return假。

然后您可以将其添加到您的步骤或测试中:

Then(/^I verify that alert is visible with text $/, async () => {
  //                      ↓ call function
  await browser.waitUntil(isAlertPresent());
  const msg = await browser.getAlertText();
  expect(msg).toEqual('Text on alert');
});

此外,您可以考虑将 isAlertPresent 函数添加为自定义命令。阅读更多 here.