diadia

興味があることをやってみる。自分のメモを残しておきます。

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()メソッドを使ってもクリックできない場合があって、それに対応するためのもの。

ヘッドレスモードでクリックが反応しない場合の対処に関する資料

python - Is it possible to use `element.click()` on Selenium with Chrome even on headless mode? - Stack Overflow