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.by
from 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.keys
from 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