似乎在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
}
有没有办法检查是否存在警告对话框,而不必捕获异常?
答案 0 :(得分:2)
这里的实际答案是否定的,你必须始终捕获异常。 API设计背后的逻辑是,您应该始终了解您期望的浏览器状态。如果您希望显示警报,则应该可以使用switchTo()
切换到该警报并进行处理。如果您希望显示警报,并使用switchTo()
但它不存在,则这是一种异常情况,并抛出异常。正常(非例外)情况是不期望警报,因此没有相应的方法来查找未显示的警报。顺便说一句,这与findElement()
使用的逻辑相同。你可以说API设计者正在使用错误的逻辑,但这就是当前API的实现方式。
答案 1 :(得分:0)
记住你的摘录:
有没有办法检查是否存在警告对话框 不得不抓一个例外?
当没有警报窗口时尝试执行切换时,此异常可能是由以下语句引起的:
var alert = browser.SwitchTo().Alert();
我建议您尝试:
首先使用getWindowHandles api方法并调查 是否存在警报,即另一个窗口。你可以循环或检查 使用计数器。
如果出现“警报”窗口,您可以使用其窗口句柄并将其关闭。
否则(即如果警报窗口不存在)跳过执行下面的语句
从而避免例外。
var alert = browser.SwitchTo()。Alert();
更多信息abt在窗口和窗口句柄之间移动here