gpt4 book ai didi

c# - 如何快速检查警报是否存在?

转载 作者:行者123 更新时间:2023-11-30 17:36:02 25 4
gpt4 key购买 nike

当尝试检查是否存在警报时,我在 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 上运行的。我的驱动程序是 EventFiringWebDriverFirefoxDriverWrappedDriver。运行它的 Firefox 版本是 47.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 创建和维护,以及 Firefox 48 及更高版本自动化所需的机制)也可能不会受到这种延迟的影响.

关于c# - 如何快速检查警报是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com