不存在警报/未找到模式对话框——WebDriver 无法捕获 JS 错误

Posted

技术标签:

【中文标题】不存在警报/未找到模式对话框——WebDriver 无法捕获 JS 错误【英文标题】:No Alert is present/No modal dialog found -- WebDriver unable to catch JS error 【发布时间】:2011-10-11 07:56:01 【问题描述】:

我正在为我们的生产站点自动执行基于“添加员工”表单的测试。当输入已经存在的 id 或 email 或 name 时,会弹出一个服务错误,显示该员工无法注册。即使出现了这个框,测试也通过了:(。我尝试在我的代码中使用 driver.switchTo().alert() 函数。这就是发生的事情:

Alert alert=driver.switchTo().alert();
String text=alert.getText();
System.out.println(text);

使用 Firefox 7 + Selenium WebDriver 2.8.0:

org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information); duration or timeout: 2.11 seconds
    Build info: version: '2.8.0', revision: '14056', time: '2011-10-06 12:41:48'
    System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.37.6-0.7-desktop', java.version: '1.6.0_26'
    Driver info: driver.version: RemoteWebDriver

使用 Chrome + Web 驱动程序:

[1011/131949:ERROR:automation_json_requests.cc(59)] JSON request failed: GetAppModalDialogMessage
    with error: No modal dialog is showing

错误快照:

问题:

如果我没有得到对话框的文本,那很好。这是唯一会出现的警报。所以,只要知道警报出现就可以解决我的问题。但是,这两件事都说不存在警报/模式对话框:(

谢谢。

编辑:我也试过这个:

Selenium selenium=new WebDriverBackedSelenium(driver,baseUrl);
System.out.println(selenium.isAlertPresent());

这给出了错误。不是警告框吗?它也不是模态对话框吗?如果不是这些东西,我如何在页面上找到它的存在?

【问题讨论】:

【参考方案1】:

很多时候发生的事情是 Selenium 代码在浏览器呈现警报之前执行。我倾向于做的是这样的:

Alert getAlert() 
    try 
        Alert alert = driver.switchTo().alert();
        return alert;
     catch (NoAlertPresentException e) 
        // no alert to dismiss, so return null
        return null;
    

我真的不认为这是理想的,但我目前不知道在 Selenium 中有更好的方法。我倾向于定期从我的测试中盲目地调用它,如果它返回警报,我会忽略它。如果您希望应用程序发出警报并希望在继续之前将其关闭,请将其包装在 while 循环中。

【讨论】:

【参考方案2】:

我在模型对话框中也遇到了同样的问题。

你要做的就是找到ok按钮的xpath并继续。

我也做了同样的事情,并且成功地做到了。

找到 webelement 并在 webelement 和单击“确定”按钮之间等待。

不要使用像driver.switchto.alert.accept();这样的警报。

【讨论】:

以上是关于不存在警报/未找到模式对话框——WebDriver 无法捕获 JS 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WebDriver 检查是不是存在警报?

WebDriver在解除权限对话框警报后未检测到单击的底部元素

Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?

离开页面前的 Jquery 未保存更改警报

警报对话框中的 TextView 未居中或未格式化

未找到 MaterialLocalizations