テストの記述
はじめに
Playwrightのテストはシンプルで、
- アクションを実行し、
- 期待値に対して状態をアサートします。
アクションを実行する前に何かを待つ必要はありません。Playwrightは、各アクションを実行する前に、広範囲にわたるアクション可能性のチェックが合格するまで自動的に待機します。
チェックを実行する際に競合状態に対処する必要もありません。Playwrightのアサーションは、最終的に満たされるべき期待値を記述するように設計されています。
それだけです!これらの設計上の選択により、Playwrightユーザーはテストにおける不安定なタイムアウトや競合するチェックについて一切心配する必要がなくなります。
学べること
最初のテスト
テストの書き方については、以下の例をご覧ください。ファイル名がtest_
プレフィックスの慣例に従っていること、および各テスト名がそれに続いていることに注意してください。
import re
from playwright.sync_api import Page, expect
def test_has_title(page: Page):
page.goto("https://playwright.dokyumento.jp/")
# Expect a title "to contain" a substring.
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.goto("https://playwright.dokyumento.jp/")
# Click the get started link.
page.get_by_role("link", name="Get started").click()
# Expects page to have a heading with the name of Installation.
expect(page.get_by_role("heading", name="Installation")).to_be_visible()
アクション
ナビゲーション
ほとんどのテストは、ページをURLにナビゲートすることから始まります。その後、テストはページ要素と対話できるようになります。
page.goto("https://playwright.dokyumento.jp/")
Playwrightは、先に進む前にページがロード状態に達するのを待ちます。page.goto()のオプションについて詳しくはこちらをご覧ください。
インタラクション
アクションの実行は、要素の特定から始まります。Playwrightでは、そのためにロケーターAPIを使用します。ロケーターは、いつでもページ上の要素を見つける方法を表します。利用可能な異なるタイプのロケーターについて詳しくはこちらをご覧ください。Playwrightは、アクションを実行する前に要素がアクション可能になるまで待機するため、利用可能になるのを待つ必要はありません。
# Create a locator.
get_started = page.get_by_role("link", name="Get started")
# Click it.
get_started.click()
ほとんどの場合、1行で記述されます。
page.get_by_role("link", name="Get started").click()
基本的なアクション
これは最も人気のあるPlaywrightアクションのリストです。他にもたくさんありますので、それらについて詳しく知るにはロケーターAPIのセクションを必ず確認してください。
アクション | 説明 |
---|---|
locator.check() | 入力チェックボックスをチェックする |
locator.click() | 要素をクリックする |
locator.uncheck() | 入力チェックボックスのチェックを外す |
locator.hover() | 要素にマウスをホバーする |
locator.fill() | フォームフィールドにテキストを入力する |
locator.focus() | 要素にフォーカスする |
locator.press() | 単一のキーを押す |
locator.set_input_files() | アップロードするファイルを選択する |
locator.select_option() | ドロップダウンのオプションを選択する |
アサーション
Playwrightには、期待される条件が満たされるまで待機するアサーションが含まれています。これらのアサーションを使用することで、テストを不安定にせず、回復力のあるものにすることができます。例えば、このコードはページが「Playwright」を含むタイトルを取得するまで待機します。
import re
from playwright.sync_api import expect
expect(page).to_have_title(re.compile("Playwright"))
最も人気のある非同期アサーションのリストを次に示します。他にもたくさんありますので、ぜひご確認ください。
アサーション | 説明 |
---|---|
expect(locator).to_be_checked() | チェックボックスがチェックされている |
expect(locator).to_be_enabled() | コントロールが有効になっている |
expect(locator).to_be_visible() | 要素が表示されている |
expect(locator).to_contain_text() | 要素がテキストを含んでいる |
expect(locator).to_have_attribute() | 要素が属性を持っている |
expect(locator).to_have_count() | 要素のリストが指定された長さを保持している |
expect(locator).to_have_text() | 要素がテキストに一致する |
expect(locator).to_have_value() | 入力要素が値を持っている |
expect(page).to_have_title() | ページにタイトルがある |
expect(page).to_have_url() | ページにURLがある |
テストの分離
Playwright Pytestプラグインは、テストに渡される組み込みのページフィクスチャなどのテストフィクスチャの概念に基づいています。ページはブラウザコンテキストによってテスト間で分離されます。これは、新しいブラウザプロファイルに相当し、複数のテストが1つのブラウザで実行される場合でも、各テストは新しい環境を取得します。
from playwright.sync_api import Page
def test_example_test(page: Page):
pass
# "page" belongs to an isolated BrowserContext, created for this specific test.
def test_another_test(page: Page):
pass
# "page" in this second test is completely isolated from the first test.
フィクスチャの使用
様々なフィクスチャを使用して、テストの前後にコードを実行したり、オブジェクトを共有したりできます。`autouse`付きの`function`スコープのフィクスチャは`beforeEach`/`afterEach`のように動作します。また、`autouse`付きの`module`スコープのフィクスチャは、すべてのテストの前後で実行される`beforeAll`/`afterAll`のように動作します。
import pytest
from playwright.sync_api import Page, expect
@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):
print("before the test runs")
# Go to the starting url before each test.
page.goto("https://playwright.dokyumento.jp/")
yield
print("after the test runs")
def test_main_navigation(page: Page):
# Assertions use the expect API.
expect(page).to_have_url("https://playwright.dokyumento.jp/")