テストの作成
イントロダクション
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 プラグインは、テストフィクスチャの概念に基づいています。たとえば、組み込みの page フィクスチャなどがあり、これはテストに渡されます。ページは、すべてのテストが新しい環境を取得する真新しいブラウザプロファイルと同等のブラウザコンテキストにより、テスト間で分離されています。複数のテストが単一のブラウザで実行されている場合でも同様です。
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/")