Seleniumの動作(状態別/2:Chrome)

概要

テスト画面

Google Chrome

83.0.4103.116(64bit)
Version 83.0.4103.116(64bit)

Button

クリック

ロケータ欄にidを入力して、「id」ボタン押下。要素が取得できたら「click」ボタン押下。
操作が成功すると、生成コード欄に、実行したPythonコードが出力されます。

ノーマル

クリックできます。

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

非活性(disabled)

クリックはできますが、画面が反応しません。

反応なし
反応なし

非活性(pointer-events:none)

要素は取得できますが、例外が発生します。

要素の取得
要素取得
例外発生
例外発生
ElementClickInterceptedExceptionMessage: element click intercepted: Element <input type="submit" id="submit3" value="submit" class="btn-submit" style="pointer-events:none;" tabindex="-1" onclick="element_click('submit3!')"> is not clickable at point (831, 445). Other element would receive the click: <div>...</div> 
(Session info: chrome=83.0.4103.116) 
<traceback object at 0x0000019291713EC8>

読み取り専用(readonly)

クリックイベントが発生します。

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

非表示(display:none)

要素は取得できますが、クリック時に例外が発生します。

要素取得
要素取得
例外発生
例外発生
ElementNotInteractableExceptionMessage: element not interactable 
(Session info: chrome=83.0.4103.116) 
<traceback object at 0x000001929171CB48>

非表示(visibility:hidden)

display:noneの場合と同じく、要素は取得できますが、クリック時に例外が発生します。

要素取得
要素取得
例外発生
例外発生

結果

ボタン click 備考
normal OK クリックイベント発生
disabled NG 反応なし
pointer-events:none Ex 要素取得は可能
readonly OK クリックイベント発生
display:none Ex 要素取得は可能
visibility:hidden Ex 要素取得は可能

手動で操作した場合も、クリックイベントが発生するのは、normalとreadonlyで、Seleniumの結果と一致します。

補足

なお、クリックで表示されたダイアログを閉じる前に、次の要素を操作しようとすると、Seleniumの例外が発生します。

ダイアログを閉じる前に要素取得
例外発生
UnexpectedAlertPresentExceptionAlert Text: submit4!
Message: unexpected alert open: {Alert text : submit4!}
  (Session info: chrome=83.0.4103.116)
<traceback object at 0x00000139E9F18EC8>

手動で操作した場合も、ダイアログを閉じないと画面操作ができません。Seleniumを使用する場合も、同様にダイアログを閉じなければならないようです。

属性の取得

では、コントロールの属性はどうでしょうか?表示状態、活性状態(有効/無効)、読み取り専用属性を取得します。

print(driver.find_element_by_id('id値').is_displayed())
print(driver.find_element_by_id('id値').is_enabled())
print(driver.find_element_by_id('id値').get_attribute("readonly"))

ノーマル

CodeCheckerのコード欄に、上記のコードを入力して「Code」ボタンを押します。
結果が返ってきます。

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:False / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:False / enabled:True / readonly:None

結果

Button is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None
  • 「readonly」はHTMLの属性なので、指定あり:true(小文字)、指定なし:Noneになります。
  • 非活性(disabled)は「is_enabled() = False」ですが、非活性(pointer-events:none)はマウスを無効にしているだけなので「is_enabled() = True」になります。
  • 「display:none」「visibility:hidden」とも、「is_displayed() = False」となりますが、活性状態は「is_enabled() = True」となります。

Link

クリック

ノーマル

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

非活性(disabled)

やはり<a>タグにはdisabledは効果がないようです。

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

手動でもクリック可能です。

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

非活性(pointer-events:none)

例外発生
例外発生

読み取り専用(readonly)

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

非表示(display:none)

例外発生
例外発生

非表示(visibility:hidden)

例外発生
例外発生

結果

Link click 備考
normal OK クリックイベント発生
disabled OK クリックイベント発生
pointer-events:none Ex 要素取得は可能
readonly OK クリックイベント発生
display:none EX 要素取得は可能
visibility:hidden Ex 要素取得は可能

属性取得

ノーマル

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

is_enabled() = True となります。やはり<a>タグにdisabledは無効のようです。

属性取得
displayed:True / enabled:True / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:False / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:False / enabled:True / readonly:None

結果

Link is_displayed() is_enabled() readonly
normal True True None
disabled True True None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None

Text

文字入力

ノーマル

idで要素を取得してから「send_key」ボタンを押下。
「hoge」と入力されます。

文字入力
文字入力

非活性(disabled)

例外発生
例外発生

非活性(pointer-events:none)

マウスを無効にしているだけなので、文字は入力できます。

文字入力
文字入力

クリックはできません。
また tabindex = -1 にしているので、手動では入力できません。

クリックで例外発生
クリックで例外発生

読み取り専用(readonly)

何も入力されません。

反応なし
反応なし

非表示(display:none)

例外発生
例外発生

非表示(visibility:hidden)

例外発生
例外発生

値の取得

テキストの内容を get_attribute('value’) で取得します。

ノーマル

「hoge」と出力されます。

hoge
value値の取得

非活性(disabled)

入力値は空ですが、値の取得自体はできています。

""
value値の取得

非活性(pointer-events:none)

「hoge」と出力されます。

hoge
value値の取得

読み取り専用(readonly)

入力値は空ですが、値の取得自体はできています。

""
value値の取得

非表示(display:none)

入力値は空ですが、値の取得自体はできています。

""
value値の取得

非表示(visibility:hidden)

入力値は空ですが、値の取得自体はできています。

""
value値の取得

結果

Text 文字入力 入力値の取得 備考
normal OK OK  
disabled Ex OK  
pointer-events:none OK OK 手動入力は不可
readonly NG OK  
display:none Ex OK  
visibility:hidden Ex OK  

属性の取得

display、enabl、 readonlyについて調べます。

ノーマル

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:Fasle / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:Fasle / enabled:True / readonly:None

結果

Text is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None

Select

項目の選択

ノーマル

idで要素を取得して、「Select」ボタン押下、リストの2番目の項目が選択されます。

option2選択
option2選択

非活性(disabled)

正常終了するものの、要素は選択できません。

反応なし
反応なし

非活性(pointer-events:none)

正常終了するものの、要素は選択できません。

反応なし
反応なし

読み取り専用(readonly)

要素が選択できます。

option2選択
option2選択

非表示(display:none)

例外が発生しました。

例外発生
例外発生
ElementNotInteractableExceptionMessage: element not interactable: Element is not currently visible and may not be manipulated
  (Session info: chrome=83.0.4103.116)
<traceback object at 0x00000150CF496E08>

非表示(visibility:hidden)

例外が発生しました。

例外発生
例外発生

選択された項目の取得

ノーマル

リストで選択されている項目を取得します。
コード欄に以下のコードを入力して、「Code」ボタンをクリックします。

select = Select(driver.find_element_by_id('select1'))
option = select.first_selected_option
print(option.text)

「option2」が表示されます。

option2
option2

非活性(disabled)

「option1」が表示されます。

option1
option1

非活性(pointer-events:none)

「option1」が表示されます。

option1
option1

読み取り専用(readonly)

「option2」が表示されます。

option2
option2

非表示(display:none)

空文字が返ってきます。

""
空文字

<option>で項目を設定しても、無効のようです。

option項目
option1~3:空文字、option4:index out of range

非表示(visibility:hidden)

空文字が返ってきます。

""
空文字

結果

Select 項目の選択 選択項目の取得 備考
normal OK OK  
disabled NG OK  
pointer-events:none NG OK  
readonly OK OK  
display:none Ex NG* 空文字が返る
visibility:hidden Ex NG* 空文字が返る

属性の取得

ノーマル

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:False / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:False / enabled:True / readonly:None

結果

Select is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None

Select(option項目)

リストの選択項目(option2)の状態について調査します。

項目選択

ノーマル

「option2」が選ばれます。

option2選択
option2選択

非活性(disabled)

選択できません。

反応なし
反応なし

手動でも選択できません。

option2非活性
option2選択不能

非活性(pointer-events:none)

選択できません。

反応なし
反応なし

手動では選択可能です。

option2選択
option2選択可能

読み取り専用(readonly)

「option2」が選ばれます。

option2選択
option2選択

非表示(display:none)

「option2」が選ばれます。

option2選択
option2選択

手動では選択できません。

option2非表示
option2非表示

非表示(visibility:hidden)

「option2」が選ばれます。

option2選択
option2選択

手動では選択できません。

option2非表示
option2非表示

選択項目の取得

ノーマル

option2
option2

非活性(disabled)

あらかじめ「option4」をdisabledで非活性、selectedで選択しておきます。
「option4」が表示されます。

option4
option4

非活性(pointer-events:none)

option2
option2

読み取り専用(readonly)

option2
option2

非表示(display:none)

option2
option2

非表示(visibility:hidden)

option2
option2

結果

Select(option) 項目の選択 選択項目の取得 備考
normal OK OK  
disabled NG OK  
pointer-events:none NG OK 手動は選択可能
readonly OK OK  
display:none OK OK 手動は選択不可
visibility:hidden OK OK 手動は選択不可

属性の取得

ノーマル

2番目の項目を取得するために option = select.options[1] を指定します。

select = Select(driver.find_element_by_id('select11'))
option = select.options[1]
print(option.text)
print(option.is_displayed())
print(option.is_enabled())
print(option.get_attribute('readonly'))
属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

「option2」は非表示にも関わらず、is_displayedは「True」になります。

属性取得
displayed:True / enabled:True / readonly:None

非表示(visibility:hidden)

「option2」は非表示にも関わらず、is_displayedは「True」になります。

属性取得
displayed:True / enabled:True / readonly:None
結果
Select(option) is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none True True None
visibility:hidden True True None

Radio

クリック

ノーマル

Radio_1選択
Radio_1選択

非活性(disabled)

反応なし
反応なし

非活性(pointer-events:none)

例外が発生しました。

例外発生
例外発生
ElementClickInterceptedExceptionMessage: element click intercepted: Element <input type="radio" id="radio_3" name="radio" style="pointer-events:none;" tabindex="-1"> is not clickable at point (800, 430). Other element would receive the click: <div>...</div>
  (Session info: chrome=83.0.4103.116)
<traceback object at 0x000002C15EFB8F48>

読み取り専用(readonly)

クリック可能です。

Radio_4選択
Radio_4選択

非表示(display:none)

例外が発生しました。

例外発生
例外発生
ElementNotInteractableExceptionMessage: element not interactable
  (Session info: chrome=83.0.4103.116)
<traceback object at 0x000002C15EFB6488>

非表示(visibility:hidden)

例外が発生しました。

例外発生
例外発生

値の取得

ノーマル

True
True

非活性(disabled)

False
False

非活性(pointer-events:none)

False
False

読み取り専用(readonly)

True
True

非表示(display:none)

False
False

非表示(visibility:hidden)

False
False

labelクリック時の動作

Radioボタンには「label for」の指定をしていますので、labelクリックでも選択が可能です。

ノーマル

XPathGetterで取得したXPathをロケータ欄にセット、「XPath」ボタン押下。
label要素を取得する、エスケープ処理済のコードが出力されます。

XPathで要素取得
XPathでlabel要素取得

コード欄にlabelクリックのコードと、radioボタンの値を取得するコードを入力します。

radio_1=True
Radio_1=True

非活性(disabled)

ラベルをクリックしてもボタンは選択されません。

radio_2=False
Radio_2=False

非活性(pointer-events:none)

radio_3=True
Radio_3=True

読み取り専用(readonly)

radio_4=True
Radio_4=True

非表示(display:none)

表示されていませんが、ラベルをクリックするとボタンが選択されます。

radio_5=True
Radio_5=True

非表示(visibility:hidden)

ラベルをクリックするとボタンが選択されます。

radio_6=True
Radio_6=True

結果

Radio ボタンclick labelクリック 値の取得
normal OK OK OK
disabled NG NG OK
pointer-events:none Ex OK OK
readonly OK OK OK
display:none Ex OK OK
visibility:hidden Ex OK OK

属性の取得

ノーマル

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:False / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:False / enabled:True / readonly:None

結果

Radio is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None

CheckBox

項目の選択

ノーマル

Check_1選択
Check_1選択

非活性(disabled)

反応なし
反応なし

非活性(pointer-events:none)

例外発生
例外発生

読み取り専用(readonly)

Check_4選択
Check_4選択

非表示(display:none)

例外発生
例外発生

非表示(visibility:hidden)

例外発生
例外発生

値の取得

ノーマル

True
True

非活性(disabled)

False
False

非活性(pointer-events:none)

False
False

読み取り専用(readonly)

True
True

非表示(display:none)

False
False

非表示(visibility:hidden)

False
False

labelクリック時の動作

各CheckBoxには「label for」の指定をしていますので、labelクリックでも選択が可能です。

ノーマル

ラベルクリックでボタンが選択されます。

Check_1=True
Check_1=True

非活性(disabled)

Check_2=False
Check_2=False

非活性(pointer-events:none)

Check_3=True
Check_3=True

読み取り専用(readonly)

Check_4=True
Check_4=True

非表示(display:none)

表示されていませんが、ラベルをクリックするとボタンが選択されます。

Check_5=True
Check_5=True

非表示(visibility:hidden)

ラベルをクリックするとボタンが選択されます。

Check_6=True
Check_6=True

結果

CheckBox ボタンclick labelクリック 値の取得
normal OK OK OK
disabled NG NG OK
pointer-events:none Ex OK OK
readonly OK OK OK
display:none Ex OK OK
visibility:hidden Ex OK OK

属性の取得

ノーマル

属性取得
displayed:True / enabled:True / readonly:None

非活性(disabled)

属性取得
displayed:True / enabled:False / readonly:None

非活性(pointer-events:none)

属性取得
displayed:True / enabled:True / readonly:None

読み取り専用(readonly)

属性取得
displayed:True / enabled:True / readonly:true

非表示(display:none)

属性取得
displayed:False / enabled:True / readonly:None

非表示(visibility:hidden)

属性取得
displayed:False / enabled:True / readonly:None

結果

CheckBox is_displayed() is_enabled() readonly
normal True True None
disabled True False None
pointer-events:none True True None
readonly True True true
display:none False True None
visibility:hidden False True None