使用Selenium WebDriver未检测到Firefox警报框

错误net.serenitybdd.core.Serenity – 不存在警报(警告:服务器未提供任何堆栈跟踪信息)

当我尝试使用此代码检测警报时出现此错误:

Alert alertBox = getDriver().switchTo().alert(); 

警报弹出窗口确实显示,但是当我通过Selenium WebDriver和manualy执行操作时,它不完全相同。 这可能是问题的根源,但我不知道为什么弹出窗口不同。

手动完成时的警报

使用Selenium完成警报

这是调用警报的函数:

 function confirm_remove() { return window.confirm("Alert message"); } 

谢谢你的帮助

更新:

好的,我找到了一种绕过问题但没有真正解决问题的方法。

我尝试插入等待和睡眠,就像你建议我一样,但它没有解决问题,警报仍未被发现。

在我的项目中,我使用的是一个Test类,它调用我的Steps类中的步骤,该类从我的Page类调用webElements。 事情是,在单击“删除”按钮的步骤和管理警报的步骤之间,Selenium会丢失警报的处理。 所以我重新组合了这两个步骤,Selenium似乎很好地处理了警报。

您可能需要添加代码以等待警报可见。 Selenium无法判断JavaScript是否已完成执行。

 waitForAlert(WebDriver driver) { int i=0; while(i++<5) { try { Alert alert = driver.switchTo().alert(); break; } catch(NoAlertPresentException e) { Thread.sleep(1000); continue; } } } 

一个更优雅的解决方案:

 WebDriverWait wait = new WebDriverWait(driver, timeout); wait.until(ExpectedConditions.alertIsPresent()); 

每次有页面加载时不存在的动态元素,使用WebDriverWait,如alert,popupwindow,modal popup,hiden元素转为可见,。