Seleniumを使ったテストのメモ
実装の際に困ったこと
django.test.LiveServerTestCaseを使う環境を把握できていなかった。
ヘッドレスモードを使う場合にはオプションに--window-sizeをつけなければならないこと。
前提
ChromeDriverを使ってseleniumを実行する
準備
seleniumをインストールする。
オプションでwebdrivermanagerをインストールしても良い。
pip install selenium
webdrivermanagerをインストールしても良い。これはseleniumが扱うChromeDriverのバージョンが異なるとエラーが出る?ようで、webdrivermanagerを使うと必要な適切なDriverをその場でインストールしてseleniumを実行するもの。
pip install webdrivermanager
LiveServerTestCaseのメモ
LiveServerTestCaseは通常のテストと同じようにassertを使ってテストする。またテストの始め方も
python manage.py test
#または
python manage.py test app.tests
で実行する。しかしながら前提としてアプリケーションサーバーを事前に起動しておく必要がある。これを行っていないとエラーが発生してしまう。
またアプリケーションサーバーのuriも同一のところにしないと当然ながらエラーが出てしまう。
アンドロイドを実機で開発しているとipを使ってrunserverするので、不一致が生じてしまうので注意すること。
seleniumを使ったテストを実行する際の注意点の資料
python - django selenium fails to load localhost - Stack Overflow
ヘッドレスモードでセレニウムを使う
def setUp(self): chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--window-size=1920,1080') self.driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)
ヘッドレスでテストを行うと画面上にブラウザが表示されないのがメリット。 ヘッドレスで起動するにはオプションを追加すれば使える。ChromeOptions()インスタンスを生成し、インスタンスにadd_argument('--headless')メソッドと引数を与えてからwebdriver.Chromeインスタンスを生成すれば良い。
別のオプションとして'--window-size=1920,1080'を追加している。これはオプションを使わずに.click()メソッドを使ってもクリックできない場合があって、それに対応するためのもの。