0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

備忘録Advent Calendar 2023

Day 12

Seleniumでの明示的待機と暗黙的待機の使い分け

Last updated at Posted at 2023-12-14

はじめに

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"))
)

参考にしたサイト📗

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?