错误net.serenitybdd.core.Serenity - 不存在警报(警告: 服务器没有提供任何堆栈跟踪信息)
当我尝试使用此代码检测警报时出现此错误:
if (!mails.areUnique()) {
alert('values are not unique');
} else {
alert('values are unique');
}
警报弹出窗口确实显示,但是当我通过Selenium WebDriver和manualy执行操作时它并不完全相同。这可能是问题的根源,但我不知道为什么弹出窗口不同。
The alert when done with Selenium
这是调用警报的函数:
Alert alertBox = getDriver().switchTo().alert();
感谢您的帮助
更新
好的,我找到了一种绕过问题的方法,但没有真正解决问题。
我尝试插入等待并像你建议的那样睡觉,但它没有解决问题,警报仍未被发现。
在我的项目中,我使用的是一个Test类,它调用我的Steps类中的步骤,该类从我的Page类调用webElements。事情就是点击"删除"按钮和管理警报的步骤,Selenium失去了警报的处理。所以我重新组合了这两个步骤,Selenium似乎很好地处理了警报。
答案 0 :(得分:0)
您可能需要添加代码以等待警报可见。 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;
}
}
}
答案 1 :(得分:0)
更优雅的解决方案:
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.alertIsPresent());
使用WebDriverWait,每次加载页面时都不存在动态元素,如alert,popupwindow,modal popup,hiden元素变为可见,。