Seleniumの動作(入力時例外/5:IE)

概要

テスト画面

Internet Explorer

11.973.17763.0
Version 11.973.17763.0

click()メソッドの動作

Seleniumのclick()メソッドは、IEでは、画面にフォーカスが当たっていないと正常に動作しません。
フォーカスの当たっていない状態では、1回目のクリックでコントロールにフォーカスが当たり、2回目のクリックでクリックイベントが発生します。

1回目のクリックでコントロールにフォーカスが当たります。

フォーカス取得
クリック1回目

2回目のクリックでクリックイベントが発生します。

クリックイベント発生
クリック2回目

ブラウザのズーム倍率

IEメニューの「設定」から「拡大(Z)」を選んで、画面の倍率を90%にします。

拡大率の設定
拡大率の設定

Button

submitボタン

「click」ボタンを何回押しても、クリックできません。フォーカスも取得できません。

反応なし
反応なし

is_enabled()は「Ture(有効)」です。

is_displayed()=True
is_displayed()=True

Link

クリックできません。

反応なし
反応なし

Text

文字入力可能です。

文字入力
文字入力

Select

選択できます。

option2選択
option2選択

Radio / CheckBox

クリックできません。

反応なし
反応なし

ラベルをクリックしても、フォーカス取得、クリックイベントは発生しません。

反応なし
反応なし

実行結果

コントロール 要素 操作 結果
Button submit click NG
button click NG
image click NG
Link normal click NG
img click NG
css click NG
Text textbox send_key OK
password send_key OK
textarea send_key OK
Select select select OK
Radio radio click NG
label click NG
CheckBox checkbox click NG
label click NG

非表示要素

プルダウンメニューがクリックできるかを確認します。

プルダウンメニュー

Menu

「Menu3」の「child2」をクリックします。
例外が発生します。

例外発生
例外発生
ElementNotInteractableExceptionMessage: Element is not displayed
<traceback object at 0x0000012DBE081648>

“is_displayed()"は「False(非表示)」です。

is_displayed()=False
is_displayed()=False

要素の上に、別の要素が重なっている

Alertダイアログ

「Menu1」をクリックすると、JavaScriptのAlertダイアログが表示されます。
Alertはモーダルダイアログです。

alertダイアログ表示
Alertダイアログ(通常)

Windows10では、IEのAlertダイアログは2種類あり、何回か表示すると、チェックボックス付きに変わります。
再表示を抑制する文言「このページにこれ以上メッセージの作成を許可しない」及び、チェックボックスが表示されます。

alertダイアログ(チェックボックス付)
Alertダイアログ(チェック付)

Button

通常のAlertダイアログと、チェックボックス付きのAlertダイアログで動作が異なります。

通常ダイアログ

Alertダイアログが表示された状態で、submitボタンをクリックすると、ダイアログが閉じて例外が発生します。

通常ダイアログ表示
通常ダイアログ表示
例外発生
例外発生
UnexpectedAlertPresentExceptionAlert Text: Menu1!
Message: Modal dialog present with text: Menu1!
<traceback object at 0x0000012DBE0AE848>

通常ダイアログでは、Chorme、Firefox、Edgeと同じく、要素の取得もできません。

チェックボックス付きダイアログ

Alertダイアログが表示された状態で、submitボタンをクリックすると、ダイアログが閉じてクリックイベントが発生します。

チェックボックス付きダイアログ表示
チェックボックス付きダイアログ表示
クリックイベント発生
クリックイベント発生

この場合は、要素がダイアログで隠れていてもクリック可能です。

チェックボックス付きダイアログ表示
クリック対象の要素が隠れている
クリックイベント発生
クリックイベント発生

なお、手動ではクリック不可です。

クリック不可
クリック不可

Link

Buttonと同様に、通常ダイアログとチェックボックス付きダイアログで動作が異なります。

通常ダイアログ

例外が発生します。

通常ダイアログ表示
通常ダイアログ表示
例外発生
例外発生
チェックボックス付きダイアログ

クリック可能です。

チェックボックス付きダイアログ表示
チェックボックス付きダイアログ表示
クリックイベント発生
クリックイベント発生

Text

通常ダイアログ

例外が発生します。

通常ダイアログ表示
通常ダイアログ表示
例外発生
例外発生
チェックボックス付きダイアログ

ダイアログが閉じ、文字が入力されます。

チェックボックス付きダイアログ表示
チェックボックス付きダイアログ表示
文字入力
文字入力

Select

通常ダイアログ

Alertダイアログが閉じ、例外が発生します。

通常ダイアログ表示
通常ダイアログ表示
例外発生
例外発生
チェックボックス付きダイアログ

ダイアログが閉じ、選択可能です。

チェックボックス付きダイアログ表示
チェックボックス付きダイアログ表示
option2選択
option2選択

Radio / CheckBox

通常ダイアログ

Alertダイアログが閉じ、例外が発生します。

通常ダイアログ表示
通常ダイアログ表示
例外発生
例外発生
チェックボックス付きダイアログ

ダイアログが閉じ、選択可能です。

チェックボックス付きダイアログ表示
チェックボックス付きダイアログ表示
Radio_3選択
Radio_3選択

実行結果

Alertダイアログ(通常)
alertダイアログ(通常)

ダイアログが閉じ、例外が発生します。

コントロール 要素 操作 結果
Button submit click Ex
button click Ex
image click Ex
Link normal click Ex
img click Ex
css click Ex
Text textbox send_key Ex
password send_key Ex
textarea send_key Ex
Select select select Ex
Radio radio click Ex
label click Ex
CheckBox checkbox click Ex
label click Ex

要素の取得もエラーになる。
SeleniumではAlertダイアログが閉じるが、手動では閉じない

Alertダイアログ(Window10:チェックボックス付き)
alertダイアログ(チェックボックス付)

ダイアログが閉じ、入力可能です。

コントロール 要素 操作 結果
Button submit click OK
button click OK
image click OK
Link normal click OK
img click OK
css click OK
Text textbox send_key OK
password send_key OK
textarea send_key OK
Select select select OK
Radio radio click OK
label click OK
CheckBox checkbox click OK
label click OK

Windows10のチェックボックス付きAlertダイアログ

  • 通常ダイアログとチェックボックス付きとで、なぜ結果が異なるのか?
  • 下記にある通り、confirm/promptではチェックボックスの有無による差異はありません。alertのみ動作が異なります。
  • 同じチェックボックス付きでも、Firefoxでは動作に違いがないこと
  • IEのWebDriverは32bitを使用しているが関係はあるのか?
  • 32bit版のWindows10でも動きは変わらないのか?

疑問は色々とありますが、回避策を考える方が早いので、調査はここまでにします。

Windows10で表示されるようになった、「このページにこれ以上メッセージの作成を許可しない」という、再表示抑制のためのチェックボックスは評判が良くありません。
ダイアログに対する操作がオペレーションに必要な場合、一度チェックボックスにチェックを入れてしまうと、ダイアログが表示されなくなり、その後のオペレーションができなくなるという問題があります。

そのような場合は、自作するか、jQueryなどのライブラリを使用することをお勧めします。

confirm / promptダイアログ

Javascriptでは、alertの他に、confirmダイアログとpromptダイアログがあり、ともにモーダルです。
Windows10では、それぞれ2回目以降からの表示はチェックボックスが表示されますが、Alertと異なり、動作に違いはありませんでした。

confirmダイアログ

どちらも例外が発生

通常
confirmダイアログ(通常)
confirmダイアログ(通常)
例外発生
例外発生
チェックボックス付き
confirmダイアログ(チェック付)
confirmダイアログ(チェック付)
例外発生
例外発生

promptダイアログ

どちらも例外が発生

通常
promptダイアログ(通常)
promptダイアログ(通常)
例外発生
例外発生
チェックボックス付き
promptダイアログ(チェック付)
promptダイアログ(チェック付)
例外発生
例外発生

ダイアログ表示(モードレス)

「Menu2」をクリックすると、jQueryのモードレスダイアログが表示されます。

dialog表示

Button

submitボタン

ダイアログが重なっている状態で、submitボタンをクリックします。
例外が発生します。

例外発生
例外発生
ElementClickInterceptedExceptionMessage: Element not clickable at point (832,367). Other element would receive the click: <p>This dialog is specfied "z-index:999".<br>
  
<traceback object at 0x000002470A8BBD48>

ダイアログを移動させて、submitボタンを表示すれば、クリック可能です。ただしIEの場合は、1回目でフォーカスを取得し、2回目のクリックでクリックイベントが発生します。

クリックイベント発生
クリックイベント発生

手動の場合もクリック可能です。

クリックイベント発生
クリックイベント発生

is_displayed()は「True(表示)」です。

is_displayed()=True
is_displayed()=True

Link

Buttonと同じく、要素が隠れていると例外が発生します。

Text

クリックと異なり、要素が隠れている場合でも、文字入力は可能です。

文字入力
文字入力
hoge
hoge

Select

要素が隠れていても、選択可能です。

option2選択
option2選択
option2
option2

Radio / CheckBox

ButtonやLinkと同じく、要素が隠れているとクリックできません。

実行結果

コントロール 要素 操作 結果
Button submit click Ex
button click Ex
image click Ex
Link normal click Ex
img click Ex
css click Ex
Text textbox send_key OK
password send_key OK
textarea send_key OK
select   select OK
radio radio click Ex
label click Ex
checkbox checkbox click Ex
label click Ex

例外が起きるのは、ダイアログで要素が隠れている場合

ヘッダー/フッター

スクロール追従型のヘッダー/フッターで要素が隠れている場合を考えます。

Button

submitボタン

submitボタンをヘッダーに隠した状態でclickボタンを押します。
例外が発生しました。

例外発生
例外発生
ElementClickInterceptedExceptionMessage: Element not clickable at point (832,86). Other element would receive the click: <a id="menu2" onclick="show_dialog()" href="#nav_sample">Menu2</a>
<traceback object at 0x0000027BE1149048>

is_displayed() は「True」です。

is_displayed()=True
is_displayed()=True

Link

Linkをヘッダーに隠した状態でclickボタンを押します。
例外が発生しました。

例外発生
例外発生

Text

textbox

textboxをヘッダーに隠した状態で、「send_key」ボタンを押します。
「hoge」と入力されます。

文字入力
文字入力
hoge
hoge
Select

選択可能です。

option2選択
option2選択
option2
option2

Radio / CheckBox

Radioボタンをフッターに隠して、「click」ボタンを押します。
例外が発生します。

例外発生
例外発生

実行結果

コントロール 要素 操作 結果
Button submit click Ex
button click Ex
image click Ex
Link normal click Ex
img click Ex
css click Ex
Text textbox send_key OK
password send_key OK
textarea send_key OK
Select select select OK
Radio radio click Ex
label click Ex
CheckBox checkbox click Ex
label click Ex