【Python3】Seleniumでアラートを操作する方法

2022年9月11日

おはこんばんにちは、せなです。
今回はSeleniumでアラートを操作する判定する方法を説明したいと思います。

初めに

アラートには以下の3種類が存在すると思います。

  • alert: OKのみのボックス
  • confirm: OK、キャンセルのボックス
  • prompt: 入力フォーム付きのボックス

操作方法はいずれも同様のものとなりますが、promptは入力も含まれるため少し異なります。

アラートが表示されるまで待機する

アラートを待機する際には「alert_is_present()」を使用します。
WebDriverWaitのuntilメソッドと併用することで、指定したタイムアウト時間まで待機しつつ
アラートが表示される(Trueになる)まで待機することができます。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.alert import Alert

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.google.com/')

# タイムアウト時間を10秒に設定
wait = WebDriverWait(driver, 10)

# アラートを実行
driver.execute_script("window.confirm('Confirm');")

# try/catchでタイムアウト判定を行う
try:
    # アラートが表示されるまで待機
    wait.until(EC.alert_is_present())
except TimeoutException as e:
    ### 例外処理
    print(e)

# アラート情報の保存
alert = Alert(driver)

アラートのボタンを押下する

アラートのボタンを押下する場合は「accept」と「dismiss」で対応することができます。
補足ですが、ボタンがOK以外のsuccessや承認などの別の表記となっていても全てaccept()メソッドで対応できます。(キャンセルも同様)

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.alert import Alert

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.google.com/')

# アラートを実行
driver.execute_script("window.confirm('Confirm');")

# アラート情報の保存
alert = Alert(driver)

# アラートのOKボタンを押下
alert.accept()

# アラートのキャンセルを押下
# alert.dismiss()

アラートのダイアログテキストを取得する

ダイアログテキストの取得は簡単でAlertクラスで取得した情報からtextを返却するだけです。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.alert import Alert

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.google.com/')

# アラートを実行
driver.execute_script("window.alert('Alert');")
# アラート情報を取得
alert = Alert(driver)
# アラートのテキスト取得
text = alert.text

アラートのフォームへテキストを入力する

promptのフォームへ入力したい場合は「send_keys()」を使用しましょう。
また、入力フォームが2つ以上あるときには「send_keys('hoge’+ u’\ue004’ + 'huga’)」のようにキーを入力しておくことで対応できますね。(WebDriverキーについて

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.alert import Alert

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.google.com/')

# アラートを実行
driver.execute_script("window.prompt('Prompt');")

# アラート情報の保存
alert = Alert(driver)

# アラートのテキストを入力
alert.send_keys("Selenium")