Webdriver IO - Firefox 浏览器无法识别 browser.acceptAlert() 并显示错误,指出它不是一个函数



我自动化了一个场景,在这个场景中,我需要验证点击按钮后浏览器警报对用户可见,并且包含正确的文本。通常我使用谷歌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;
}
}
};
}

这是一个简单的函数,它返回另一个试图获取警报文本的函数,如果成功,则返回true。如果警报不存在,则返回false。

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

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函数添加为自定义命令。点击此处阅读更多信息。

最新更新