はじめに
Seleniumでの明示的待機と暗黙的待機の使い分けに関しての備忘録です。
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
🦁結論🦁
基本は「明示的待機」を使う
明示的待機と暗黙的待機の違い
- 「明示的待機」は特定の条件の成立を待つ。
- 「暗黙的待機 」はすべての要素検索に一律の待機時間を適用して待つ。
明示的待機を使う時
- ページが表示完了するのを待機
- ポップアップやモーダルウィンドウの待機
- ファイルダウンロード完了の待機
- 特定の状態までの待機(例:チェックボックスがチェックされる、ドロップダウンリストで特定のオプションが選択されるなど)
注意点
- 明示的待機と暗黙的待機を同時に使用すると、予期しないタイムアウトやパフォーマンスの問題が発生する可能性がある。
- 明示的待機はより柔軟で信頼性が高いため、特定の条件を待つ場合に推奨されてる。
- 暗黙的待機は、すべての要素検索に一律の待機時間を適用するため、使い方には慎重である必要がある
基本文法
WebDriverWait(driver, 10).until(
EC.funciton_kinds((By.ID, 'myElementId'))
)
WebDriverWait(driver, 10)
引数にある「driver」(指定したブラウザ)を最大10秒間待つように設定
.until(
指定した(引数)条件が真(True)になるまで、WebDriver(ブラウザ)が待機するように指示するメソッド
EC.funciton_kinds
待機する条件を指定する(funciton_kindは例)
ここに下記の関数を入れることで指定できる。
((By.ID, 'myElementId'))
指定する値など
expected_conditions モジュール内の関数の種類
- presence_of_element_located:
指定する要素のIDやクラス名などに一致する要素がDOM上に存在まで待機。
sample.py
# IDが'myElementId'の要素がDOMに存在するのを待機
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'myElementId'))
)
- element_to_be_clickable:
指定された要素がクリック可能な状態になるまで待機。これは、要素が表示され、有効な状態(disabled状態でない)であることを意味します。
sample.py
# IDが'myButton'のボタンがクリック可能になるのを待機
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, 'myButton'))
)
- visibility_of_element_located:
指定された要素がDOMに存在し、かつ画面上に見える状態になるまで待機。
sample.py
# IDが'myElementId'の要素が表示されるのを待機
WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, 'myElementId'))
)
- invisibility_of_element_located:
指定された要素が画面上から消える(見えなくなる)までを待機。要素がDOMから削除されるか、非表示になることが条件。
sample.py
# IDが'myElementId'の要素が表示されるのを待機
WebDriverWait(driver, 10).until(
EC.invisibility_of_element_located((By.ID, 'myElementId'))
)
- title_contains:
ブラウザのタイトルが指定された文字列を含むまで待機します。この条件は、ページが期待されるタイトルを表示するまで待機するのに使われる。
sample.py
# ページのタイトルに特定の文字列が含まれるのを待機
WebDriverWait(driver, 10).until(
EC.title_contains('expectedTitle')
)
- text_to_be_present_in_element:
指定された要素に特定のテキストが含まれるまで待機。
sample.py
WebDriverWait(driver, 10).until(
EC.text_to_be_present_in_element((By.ID, "myElementId"), "期待するテキスト")
)
- text_to_be_present_in_element_value:
指定された要素のvalue属性に特定のテキストが含まれるまで待機。
sample.py
WebDriverWait(driver, 10).until(
EC.text_to_be_present_in_element_value((By.ID, "myInputElementId"), "期待するテキスト")
)
- element_to_be_selected:
指定された要素が選択されている(例えば、チェックボックスがチェックされている)まで待機。
sample.py
WebDriverWait(driver, 10).until(
EC.element_to_be_selected((By.ID, "myCheckboxId"))
)