繁体   English   中英

Selenium WebDriver未检测到Firefox警报框

[英]Firefox alert box not detected with Selenium WebDriver

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

当我尝试使用以下代码检测警报时收到此错误:

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

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

手动完成时的警报

用硒完成时的警报

这是调用警报的函数:

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

谢谢你的帮助

更新:

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

我尝试像您建议的那样插入等待和睡眠,但是并不能解决问题,仍然无法检测到警报。

在我的项目中,我使用Test类,该类从Steps类中调用步骤,而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,每当您完成页面加载后不存在动态元素时,例如警报,弹出窗口,模式弹出窗口,隐藏元素(变为可见)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM