PythonとSeleniumを使ったE2E自動化テスト

PythonとSeleniumを使ったE2E自動化テスト

こんにちは!つい最近開発部に入った高橋です。
自動化業務を開始して2週間くらい経ちました。進む度に壁にあたり、日々悪戦苦闘しております。
今回の記事ではPythonとSeleniumを使って、Chromeを操作するための環境構築と基本的な使い方に関して書いていきます。

目次はこちら

  • 1. Seleniumとは
  • 2. 環境構築
  • 3. 実際に動かしてみよう!!

Seleniumとは?

Selenium(セレニウム)はブラウザのオートメーションツールです。自動でブラウザを操作することでWebサイトの動作のテストを行うことができます。
クリック、キーボード入力、画面情報の取得など、画面操作を自動で行うことができます。

▼Selenium.devの公式サイト(英語のみ)によると、

Primarily it is for automating web applications for testing purposes, but is certainly not limited to just that.

Boring web-based administration tasks can (and should) also be automated as well.

公式サイト:selenium

と書かれており、Webアプリケーションのテスト自動化を行うためのデファクトスタンダード的なツールです。

テスト以外にもタスクの自動化やWebサイトのクローリングが主な用途となります。
さらにPythonとの相性もよく、プログラミング経験はあまり無いが、テスト自動化を行いたい方には定番の組み合わせのようです。

環境構築

Selenium を使ってブラウザを自動で操作するには以下をインストールする必要があります。

  • Web ブラウザ
      ┗Chrome, Firefox, IE, Opera など
  • WebDriver
      ┗ブラウザを操作するための API を公開するモジュール
  • Selenium
      ┗WebDriver と通信しプログラムからブラウザを操作するライブラリ

ここでは Python で Selenium を使う場合の環境構築について、ローカル PC に直接環境を作るやり方を紹介します。

ローカルに環境構築

Windows のローカル上で Selenium を動かす場合の環境構築方法を書きます。

こちらの方法ではこのような構成になります。

Selenium 公式サイトより

ブラウザと WebDriver が全てローカル上で動いていて、Selenium はローカルの Driver に接続する形です。

Chrome のバージョンを確認

インストールする WebDirver のバージョンを決めるために、インストールされている Chrome のバージョンを確認します。僕の環境では 87.0.4280.66 がインストールされていました。

WebDriver をインストール

Chrome の WebDriver のバイナリをダウンロードします。
下記のサイトに行き自分のブラウザのバージョンに最も近いdriverのbinaryをダウンロードします

https://github.com/danielkaiser/python-chromedriver-binary

Python の Selenium バインディング をインストール

Python の Selenium バインディングは pip でインストールします。

$ pip install selenium

動かしてみる

ローカル環境では以下のようなコードで Selenium を動かすことができます。

#webdriverをimportする 
from selenium import webdriver

# WebDriver のオプションを設定する
options = webdriver.ChromeOptions()
options.add_argument('--headless')

print('connectiong to remote browser...')
Chrome = webdriver.Chrome(executable_path=r"your/path/to/chromedriver.exe") 
driver = Chrome

driver.get('https://python.org')
print(driver.current_url)

# ブラウザを終了する
driver.quit()

上記のコードを実行すると PC で Chrome が起動します。
options.add_argument('--headless') の部分をコメントアウトすると、ブラウザの画面が表示され動いている様子を見て確認できます。

基本的な使い方

Selenium を使うための環境構築ができるようになったので実際にどのように使うのかを見ていきましょう。

やりたいこと

それでは Selenium で Chrome を動かして以下のような操作をやってみます。

  1. Python.orgのtoppageのサーチバーにアクセスする
    https://pyhton.org
  2. サーチバーに「list」と入力して「Go」ボタンをクリック
  3. 遷移先のページにある「list comprehension」のリンクを習得

Python で Selenium を動かす

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

#driverのPathを設定してdriverを定義します。
Chrome = webdriver.Chrome(executable_path=r"your/path/to/chromedriver.exe")
driver = Chrome

# 今回は実際のブラウザ上で挙動を見たいのでコメントアウトしています。
# こうすることで、ブラウザを起動せずにテストを実行できます
# options = webdriver.ChromeOptions()
# options.add_argument('--headless')

# 1. Python.orgのトップページにアクセスしてブラウザを最大化します
driver.get('https://pyhton.org')
driver.maximize_window()
print(driver.current_url)
# > https://pyhton.org

# 2. searchフィールドを探し、フィールドをクリック。一旦フィールドをクリアして「list」と入力後,「GO」ボタンを押して次のページに遷移するまで1秒間なにもしない
search_field = driver.find_element(By.ID, 'id="id-search-field"')
search_field.click()
search_field.clear()
search_field.send_keys("list")
go_button = driver.find_element(By.ID, 'id="submit"')
go_button.click()
time.sleep(1)
print(driver.current_url)
# > https://www.python.org/search/?q=list&submit=


# 3. list comprehensionsのタイトルにある URL を取得する
list_comprehension_link = driver.find_elements(By.XPATH, "//ul[@class='list-recent-events menu']/li[13]//a")
print(list_comprehension_link.get_attribute('href'))
# > https://www.python.org/dev/peps/pep-0202/

# x. ブラウザを終了する
driver.quit()

以上、簡単に全体像を説明しました。

次回の記事では、上で書いたコードの詳細について説明していこうと思います。