如何检查是否快速出现警报?

时间:2016-11-02 09:54:18

标签: c# .net selenium selenium-webdriver

在尝试检查是否存在提醒时,我会在名为IWebDriver的{​​{1}}上调用扩展方法,即:

AlertIsDisplayed

但是,由于我捕获异常的事实,这需要2-3秒才能返回结果。在数百次测试中使用它会增加几分钟的额外执行时间。

所以为了加快速度,我尝试将相同的方法更改为:

try
{
    Driver.Instance.SwitchTo().Alert();

    return true;
}
catch (NoAlertPresentException)
{
    return false;
}
finally
{
    Driver.Instance.SwitchTo().DefaultContent();
}

return ExpectedConditions.AlertIsPresent()(driver) != null; driver,其中调用了扩展方法。

但是,这需要相同的时间。看source code of ExpectedConditions.AlertIsPresent揭示了原因 - 这正是我以前做过的事情,但仅仅是在包装中......

我已将IWebDriver设为0。

这是在Selenium版本2.53.1上运行的。我的驱动程序是ImplicitWaitEventFiringWebDriverWrappedDriver。运行的Firefox版本是47.0.1。

是否有其他方法可以检查是否存在花费较少时间的警报?

2 个答案:

答案 0 :(得分:1)

简短的回答是,"不,在使用旧版Firefox驱动程序时,无法避免在确定不存在警报时延迟2秒。"

更长的答案是,WebDriver API的理念是您应该始终了解自动化页面的状态。一旦您要求API以某种方式与浏览器交互,您应该知道在该交互之后页面的预期状态是什么。因此,只有在您希望存在警报的情况下,才会切换到警报。尝试切换到没有警报的警报是一种特殊情况,因此异常是正确的(根据API的原理)抛出。

在旧版Firefox驱动程序的特定情况下,无法判断窗口管理器是否已完全绘制警报,因此it hard-codes a two-second sleep用于查找警报存在。请注意,旧版Firefox驱动程序要求它可以跨平台工作,因此Windows可能不需要此延迟这一事实并不是删除它的理由。此外,此旧版驱动程序已弃用,will not work with any version of Firefox 48 and higher

好消息是其他浏览器驱动程序不应该有此限制,因此它们不应受此类延迟的影响。还应该指出,Firefox驱动程序的下一次迭代(代号为Marionette,由Mozilla创建和维护,以及为版本48及更高版本自动化Firefox所需的机制)也可能不会遭受此类延迟

答案 1 :(得分:0)

预期条件明确等待):写下您自己的预期条件。

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
    IWebElement myDynamicElement = wait.Until(ExpectedConditions.AlertIsPresent());

此处,请保持TimeSpan.FromSeconds(1)仅等待one second(或根据您的要求0.5秒)。请根据您的要求更改代码(我不了解C#)。关键点是webdriver等待检查预期条件为真的时间。

参考文献:

  1. http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp