【ヒント】Python/Playwrightテクニック
By khoanc, at: 2023年9月2日10:03
Estimated Reading Time: __READING_TIME__ minutes
![[TIPS] Python/Playwright Tricks](/media/filer_public_thumbnails/filer_public/5a/a0/5aa03ee4-db55-4372-9dd7-9f266823b712/playwright_-_tips_and_tricks_-_python.png__1500x900_crop_subsampling-2_upscale.png)
![[TIPS] Python/Playwright Tricks](/media/filer_public_thumbnails/filer_public/5a/a0/5aa03ee4-db55-4372-9dd7-9f266823b712/playwright_-_tips_and_tricks_-_python.png__400x240_crop_subsampling-2_upscale.png)
Playwrightは、クロスブラウザサポートと高速実行を提供する、ウェブアプリケーションの自動化とテストのための強力なツールです。PythonでPlaywrightを使用する場合、テスト効率と有効性を高めるために活用できるいくつかのトリックとベストプラクティスがあります。
1. ロケーターを活用する
XPathやCSSセレクターに頼る代わりに、Playwrightのロケーター機能を使用してページ要素とやり取りしてください。ロケーターは、UIの変更にもより柔軟に対応し、要素を見つけるためのより信頼性が高く効率的な方法を提供します。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
locator = page.locator('text="Example Domain"')
assert locator.count() == 1
browser.close()
2. Webファーストアサーションを使用する
Webファーストアサーションを採用して、テストが続行する前に必要な条件が満たされるようにすることで、テスト結果の不安定性を軽減します。Playwrightは、to_be_visible
やto_have_text
などのビルトインアサーションを提供しています。
page.goto('https://example.com')
page.locator('h1').wait_for(state='visible')
assert page.locator('h1').text_content() == 'Example Domain'
3. 並列処理とシャーディングを採用する
テストを並列実行し、シャーディングを利用することで、テスト実行速度を最大限に高めます。Playwrightは、複数のワーカーにわたってテストを実行することをサポートしており、これによりテスト時間を大幅に短縮できます。
pytest -n auto --dist=loadscope
4. 視覚回帰テストを実装する
視覚回帰テストは、意図しないUIの変更を特定するのに役立ちます。PlaywrightのtoHaveScreenshot
メソッドを使用して、スクリーンショットをキャプチャして比較します。
page.goto('https://example.com')
page.screenshot(path='screenshot.png')
5. デバッグとテストのインサイト
テストでのデバッグ機能を強化するために、pytest-playwright
を使用します。「ヘッド付き」モードでテストを実行して、ブラウザのアクションを視覚的に観察できます。--headed
オプションを使用して、テスト実行中にブラウザを表示します。
pytest --headed
より深い洞察を得るために、page.pause()
を使用してPlaywrightインスペクターを使用します。これにより、アクションをインタラクティブにステップ実行し、要素を直接検査できます。
def test_example(page):
page.goto('https://example.com')
page.pause() # Playwrightインスペクターを開いてデバッグする
assert page.title() == 'Example Domain
このアプローチは、テストの動作をより深く理解し、開発中に問題を迅速に特定するのに役立ちます。調整したい点があればお知らせください!
6. API呼び出しのモック
API呼び出しをモックし、重要なリクエストのみに焦点を当てることで、テストを高速化します。これにより、テストの不安定性を軽減し、実行速度を向上させることができます。
page.route('**/api/**', lambda route, request: route.fulfill(body='{"mock": "data"}'))
7. 複数のコンテキストとウィンドウの処理
単一のテスト内で複数のブラウザコンテキストまたはウィンドウを必要とするアプリケーション(チャットアプリケーションなど)をテストします。
context1 = browser.new_context()
context2 = browser.new_context()
page1 = context1.new_page()
page2 = context2.new_page()
8. 高度な構成のオーバーライド
特定のテストケースでは、タイムアウト設定やブラウザの起動オプションの変更など、テストのニーズに合わせてPlaywrightのデフォルト設定をオーバーライドします。
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False, slowMo=50)
9. デバイスとネットワーク状態のエミュレート
さまざまなデバイス構成とネットワーク状態をシミュレートして、さまざまな状況下での応答性とパフォーマンスをテストします。
page.emulate_network_conditions(offline=True)
page.goto('https://example.com', timeout=60000) # 低速ネットワークのための長いタイムアウト
これらのトリックとベストプラクティスを採用することで、PythonプロジェクトでのPlaywrightの潜在能力を最大限に活用し、より堅牢で効率的なテストワークフローを実現できます。