本記事ではSeleniumを用いた自動化テストの高度な操作方法について解説します。
マウス操作のシミュレーション
- click(): クリック
- double_click(): ダブルクリック
- context_click(): リーチャート
- move_to_element(a): 要素aに移動
- drag_and_drop(a,b): aをbへドラッグアンドドロップ
- click_and_hold(): クリックして押す
- release(): 押しを解除
from selenium.webdriver.common.action_chains import ActionChains
...
dropdown_element = driver.find_element_by_xpath("//input[@value='ドロップダウン']")
ActionChains(driver).move_to_element(dropdown_element).perform()
例: ドロップダウンメニュー操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://115.28.108.130/control.html")
sleep(1)
dropdown = driver.find_element_by_xpath("//input[@value='ドロップダウン']")
ActionChains(driver).move_to_element(dropdown).perform()
driver.find_element_by_link_text("baidu").click()
sleep(5)
driver.quit()
キーボード操作のシミュレーション
from selenium.webdriver.common.keys import Keys
search_box.send_keys("龍騰育才" + Keys.ENTER)
例: 検索操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_box = driver.find_element_by_id("kw")
search_box.send_keys("龍騰育才")
search_box.send_keys(Keys.ENTER)
sleep(5)
driver.quit()
スクリーンショットの取得
driver.save_screenshot("error.png")
待機処理の方法
- 強制待機: time.sleep()
- 暗黙的待機: driver.implicitly_wait()
- 明示的待機: WebDriverWait().until()
要素検出の待機
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.XPATH, '//td[text()="山田"]')))
JavaScript操作による特殊処理
# 要素のスタイル変更
js = '''
document.getElementById("btn").style.backgroundColor = "red";
'''
driver.execute_script(js)
例: 要素の属性操作
js = 'document.querySelector("#hd1").removeAttribute("hidden");'
driver.execute_script(js)
日付選択器の操作
iframe内要素へのアクセス例:
iframe = driver.find_element_by_id("calendar_iframe")
driver.switch_to.frame(iframe)
date_picker.send_keys("2023-12-31")
ファイル操作
アップロードフォームの操作例:
upload_field = driver.find_element_by_id("file_upload")
upload_field.send_keys("/path/to/testfile.txt")