Selenium
(Python ver.)
Web アプリケーションのテストの自動化
仕様
https://seleniumhq.github.io/selenium/docs/api/py/
インストール
Python3.7のインストール
Pathの設定
chromedriverのダウンロード
http://chromedriver.storage.googleapis.com/index.html?path=2.25/ から、
pip install selenium
pyスクリプトのサンプル
from selenium import webdriver from selenium.webdriver.common.by import By import time import sys #環境に応じてchromedriverへのPath書き換え driver = webdriver.Chrome('C:\Python\chromedriver.exe') #環境に応じて、ログイン用のID,PASS書き換え USER_ID = 'user@gmail.com' USER_PASSWORD = '--------' #画面外の要素はクリックできないので、都度スクロール SCROLL_SCRIPT = 'return arguments[0].scrollIntoView(true);' # Login driver.get('https://aaaaaaaaaaaaaa/login/') element = driver.find_element_by_id('id_username') element.send_keys(USER_ID) element = driver.find_element_by_id('id_password') element.send_keys(USER_PASSWORD) element.submit() ORDER_URL_PREFIX = 'https://aaaa.com/' ORDER_URL_SUFFIX = '/edit/' DIST_ORDERS = { "test1" : { "pagePath": "asdfghjk", }, "test2" : { "pagePath": "zxcvbnm", }, } # Form edit... for order in DIST_ORDERS.values(): orderURL = ORDER_URL_PREFIX + order['pagePath'] + ORDER_URL_SUFFIX driver.get(orderURL) inputs = driver.find_elements_by_css_selector('form input[name="checkbox"]') checkedVal = inputs[i].get_attribute('checked') inputs[i].click() time.sleep(1)
要素が見つかるまで待つ
加えてByで要素取得処理
from selenium.webdriver.common.by import By selenium.webdriver.common.byfrom selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC hrefElements = WebDriverWait(driver, 5).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'a[href^="/"]')) )
特殊なキー入力を行う
selenium.webdriver.common.keysfrom selenium import webdriver from selenium.webdriver.common.keys import Keys name = 'xxxx' input = driver.find_elements_by_css_selector('input') input[0].send_keys(name) input[0].send_keys(Keys.ENTER)
例外を受け取る
from selenium.common.exceptions import NoSuchElementException try: driver.find_element_by_css_selector('input[type="checkbox"]').click() except NoSuchElementException: pass