0

ウィキペディアによると、モーダル ダイアログはアラートまたは子ウィンドウであり、「ユーザーが親アプリケーションの操作に戻る前に対話する必要がある」ことを理解しています。

私が HTML ページで見つけたモーダル ダイアログのすべてのインスタンスは、 JQuery ダイアログ<div>のような単純な要素です。それらの中には、オーバーレイを使用してメイン ページからのユーザー操作を実際にブロックするものもありますが、ダイアログが表示されている間、ユーザーがメイン ページと簡単に操作できるため、「モーダル」でさえないものもあります。

Selenium テストの 1 つで UnhandledAlertException: "Modal dialog present" が発生しているため、これを尋ねています。そして、私は疑問に思います: Selenium はモーダル ダイアログが存在することをどのように認識しますか? <div>HTML ページの多くの要素を見て、そのうちの 1 つを「ダイアログ」にし、他のすべてを「ダイアログ」にしない特別な属性は何ですか? ダイアログを「モーダル」にする 2 番目の属性は何ですか?

4

2 に答える 2

1

疑似モーダル ダイアログはほとんどの場合 2 つの div であり、1 つはウィンドウ全体を覆い、透明または着色され、その上にある別の div は実際のダイアログ (または単一の div が両方を行う組み合わせ) を表します。

これを検出するには、dom を反復処理して、位置 0,0 にあり、位置属性が絶対または固定に設定され、z-index である最大サイズ (ウィンドウ サイズに近い) の div を見つける必要があります。

ただし、これがすべてのケースで機能するという保証はありません (さまざまな実装が存在します)。つまり、検出ルーチンは適切な推測しかできません。

于 2012-09-27T07:08:46.073 に答える
0

モーダル ダイアログは別のウィンドウであり、ダイアログを閉じるまでオープナー ウィンドウを無効にします。window.showModalDialogメソッドを使用して、モーダル ダイアログを開くことができます。

ページ内の要素であるダイアログは、その意味ではモーダルではありません。ページ内のすべてのコンテンツがオーバーレイで覆われて操作できない場合でも、ページは無効にはなりません。モーダル ダイアログと同じ実用的な効果しかありません。

ページ内の要素であるダイアログは、実際のダイアログのように機能するだけで、実際のダイアログのように機能するだけです。

実際のモーダル ダイアログには独自の HTML ドキュメントが必要なため、このような「偽の」ダイアログが好まれることがよくあります。ページ内の要素であるダイアログは、セットアップが簡単で、ページとの対話が簡単です。

于 2012-09-27T06:55:31.693 に答える