Open4

Pythonのplaywright備忘録

しんしん

WebGUIの自動化をするにあたってseleniumよりとっつきやすいものがないか探していたところpython + playwrightがよさそうだったので使ってみる

しんしん

pytest+playwrightをインストール

公式ドキュメントではpytestとplaywrightを一緒にインストールすることをおススメしているのでpytest-playwrightをインストール
https://playwright.dev/python/docs/intro

pip install pytest-playwright

playwrightで使用するブラウザをインストール

playwright install
しんしん

pytestのbrowserにbasic認証用のユーザーとパスワードを設定

試しに家のルーターにログインしようとしたところ、basic認証でつまづいたのでメモ
http://xxx:xxx@192.168.10.1とURLに直打ちでも良いがhttp_credentialsを使用したほうがスマート
pytestを実行するディレクトリと同じ階層に以下のようなconftest.pyを作成

conftest.py
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        **browser_context_args,
        "http_credentials": {"username": "xxx", "password": "xxx"},
    }

こうすることでテストごとに生成されるbrowser_contextオブジェクトのhttp_credentialsにusernameとpasswordを設定してbasic認証を通すことができる
pytest-playwrightのconftest.pyについては以下のページを参照
https://playwright.dev/python/docs/test-runners

しんしん

テストが失敗しても終了させない方法(soft-assertion)

pytest-playwrightの場合、テストが失敗するとその時点でテストが終了してしまう
pytest-checkモジュールを使用してpytest-playwrightでsoft assertionを実現する

pip install pytest-check

以下のようにfixtureとして呼び出してwith句で使用する

test_hoge.py
def test_hoge(page, check):
    with check:
        expect(page.get_by_text("ページタイトル")).to_be_visible()

with句にあるexpectでエラーが発生してもテストを終了せずに続行させることができる
fixtureではなくモジュールとしてインポートしてもOK

test_hoge.py
from pytest_check import check