【发布时间】:2016-11-03 02:55:54
【问题描述】:
当尝试检查是否存在警报时,我在 IWebDriver 上调用了一个名为 AlertIsDisplayed 的扩展方法:
try
{
Driver.Instance.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
finally
{
Driver.Instance.SwitchTo().DefaultContent();
}
但是,由于我正在捕获异常,因此需要 2-3 秒才能返回结果,这是非常昂贵的。由于在数百个测试中使用它,它会增加几分钟的额外执行时间。
所以为了加快速度,我尝试将相同的方法更改为:
return ExpectedConditions.AlertIsPresent()(driver) != null;
其中driver 是调用扩展方法的IWebDriver。
但是,这需要相同的时间。查看source code of ExpectedConditions.AlertIsPresent 揭示了原因 - 这正是我之前所做的,但只是在一个包装中..
我已将我的ImplicitWait 设置为 0。
这是在 Selenium 版本 2.53.1 上运行的。我的驱动程序是EventFiringWebDriver 与WrappedDriver 的FirefoxDriver。运行的 Firefox 版本是 47.0.1。
除了检查是否存在警报之外,还有其他方法可以减少花费的时间吗?
【问题讨论】:
-
您使用的是哪个驱动程序和版本?一些司机有一个隐含的等待时间来切换到警报。
-
将此行为仅归因于异常处理是错误的。延迟可能是由于您使用的浏览器的驱动程序造成的。例如,有一次,在开源 Firefox 驱动程序(驱动程序本身,而不是语言绑定)中有一个硬编码的睡眠切换到警报,因为不能保证窗口管理器会完全绘制警报.是的,2-3 秒的延迟很糟糕,但我们不要对它的原因妄下结论,错误地将其归咎于异常处理。
-
你可以参考这个,如果有帮助的话:stackoverflow.com/questions/14737095/…
-
@JimEvans 我已经用版本信息更新了原始问题,谢谢。
-
您可以尝试使用 javascript 来检测 javascript 执行程序是否存在警报吗? --- stackoverflow.com/questions/4866986/…
标签: c# .net selenium selenium-webdriver