DjangoのテストでSeleniumを使いたい場合、LiveServerTestCaseというクラスを継承すれば簡単に実装できます。
今回はログインが正常に出来るかを検証するテストを例にこのやり方を記載したいと思います。
なお今回利用するブラウザはChromeとなりますが、ドライバを変えれば他のブラウザでもテスト可能です。
テスト準備
PythonのSeleniumパッケージをインストールする。
pip install selenium
Chromeのドライバをダウンロードする。
以下のサイトからお使いのOSに対応したChromeドライバをダウンロードします。Chromeのバージョンと同じドライバをダウンロードする事にご留意下さい。
ChromeDriver
https://sites.google.com/a/chromium.org/chromedriver/home
「pip install chromedriver-binary」でChromeドライバを利用する事も出来ますが、Chromeのバージョンと不整合を起こしSeleniumが動かない可能性もありますのでドライバをダウンロードする方法をお薦めします。
テストコードを書く
Djangoアプリケーション生成時に自動で作られるtests.pyか「test_」で始まるPythonファイルにテストコードを書きます。
以下のコードはログインをテストするサンプルコードです。
from django.test import LiveServerTestCase from django.urls import reverse_lazy from selenium.webdriver.chrome.webdriver import WebDriver class LoginTest(LiveServerTestCase): @classmethod def setUpClass(cls): super().setUpClass() cls.selenium = WebDriver(executable_path='Chromeドライバのパス') @classmethod def tearDownClass(cls): cls.selenium.quit() super().tearDownClass() def test_login(self): # ログインページを開く self.selenium.get('http://localhost:8000' + str(reverse_lazy('login'))) # ログイン username_input = self.selenium.find_element_by_name("username") username_input.send_keys('username') password_input = self.selenium.find_element_by_name("password") password_input.send_keys('password') self.selenium.find_element_by_class_name('btn').click() # ページタイトルの検証 self.assertEquals('ログイン後ページ', self.selenium.title)
テストコードを動かす。
manage.pyのコマンドを使ってテストコードを動かします。
以下はappアプリケーションの下にあるtests.pyを動かす例です。
コマンドを実行するとChromeが起動してテストが自動で進みます。ブラウザからDjangoアプリケーションにアクセスするため、開発サーバーは別途起動しておく必要があります。
$ python3 manage.py test app.tests