这是使用WebDriver处理javascript警报对话框的正确方法吗?

时间:2012-01-23 13:58:42

标签: asp.net exception webdriver javascript

似乎在ASP.NET WebDriver API中,当没有javascript警报存在时执行以下操作会导致异常:

browser.SwitchTo().Alert();

IE和FF都抛出WebDriverException,但Chrome会抛出InvalidOperationException。

到目前为止,这是唯一可行的代码:

try
{
    var alert = browser.SwitchTo().Alert();
    if (alert != null)
        alert.Dismiss();
}
catch (WebDriverException)
{
    // alert was not present in IE or FF
}
catch (InvalidOperationException)
{
    // alert was not present in Chrome
}

有没有办法检查是否存在警告对话框,而不必捕获异常?

2 个答案:

答案 0 :(得分:2)

这里的实际答案是否定的,你必须始终捕获异常。 API设计背后的逻辑是,您应该始终了解您期望的浏览器状态。如果您希望显示警报,则应该可以使用switchTo()切换到该警报并进行处理。如果您希望显示警报,并使用switchTo()但它不存在,则这是一种异常情况,并抛出异常。正常(非例外)情况是不期望警报,因此没有相应的方法来查找未显示的警报。顺便说一句,这与findElement()使用的逻辑相同。你可以说API设计者正在使用错误的逻辑,但这就是当前API的实现方式。

答案 1 :(得分:0)

记住你的摘录:

  

有没有办法检查是否存在警告对话框   不得不抓一个例外?

当没有警报窗口时尝试执行切换时,此异常可能是由以下语句引起的:

var alert = browser.SwitchTo().Alert();

我建议您尝试:

  • 首先使用getWindowHandles api方法并调查 是否存在警报,即另一个窗口。你可以循环或检查 使用计数器。

  • 如果出现“警报”窗口,您可以使用其窗口句柄并将其关闭。

  • 否则(即如果警报窗口不存在)跳过执行下面的语句
    从而避免例外。

    var alert = browser.SwitchTo()。Alert();

更多信息abt在窗口和窗口句柄之间移动here