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

时间:2016-03-01 16:51:05

标签: java firefox selenium selenium-webdriver alert

  

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

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

if (!mails.areUnique()) {
    alert('values are not unique');
} else {
    alert('values are unique');
}

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

The alert when done manualy

The alert when done with Selenium

这是调用警报的函数:

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

感谢您的帮助

更新

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

我尝试插入等待并像你建议的那样睡觉,但它没有解决问题,警报仍未被发现。

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

2 个答案:

答案 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元素变为可见,。