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
}
例外をキャッチせずに、アラートダイアログが存在することを確認する方法はありますか?
ここでの実際の答えは「いいえ」です。常に例外をキャッチする必要があります。 APIの設計の背後にある論理は、予期するブラウザーの状態を常に認識する必要があるということです。アラートが表示されることが予想される場合は、switchTo()
を使用してアラートに切り替えて処理できるはずです。アラートが表示されることが予想され、switchTo()
を使用していて、それが存在しない場合、それは例外的な状態であり、例外がスローされます。通常の(例外ではない)ケースはアラートを予期しないため、表示されていないアラートを探す対応する方法はありません。ちなみに、これはfindElement()
で採用されているのと同じロジックです。 APIデザイナが間違ったロジックを使用していると主張することはできますが、それが現在のAPIの実装方法です。