Playwright 1.28 新功能总结のフロントエンド開発における活用が広まっています。本記事では実際のプロジェクトをベースに、コア原理とベストプラクティスを掘り下げます。
基本的な使い方
まず基本的な実装方法から見てみましょう:
javascript
import { render, screen, waitFor } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { LoginForm } from './LoginForm'
describe('LoginForm', () => {
it('提交有效的登录表单', async () => {
const onSubmit = jest.fn()
render(<LoginForm onSubmit={onSubmit} />)
await userEvent.type(screen.getByLabelText(/邮箱/), 'user@example.com')
await userEvent.type(screen.getByLabelText(/密码/), 'password123')
await userEvent.click(screen.getByRole('button', { name: /登录/ }))
await waitFor(() => {
expect(onSubmit).toHaveBeenCalledWith({
email: 'user@example.com', password: 'password123'
})
})
})
})
このコードは基本的な使用方法を示しています。実際のプロジェクトでは、エラー処理とエッジケースも考慮する必要があります。
高度な使い方
この基盤の上で、さらに最適化できます:
javascript
import { test, expect } from '@playwright/test'
test.describe('用户登录流程', () => {
test('成功登录跳转到首页', async ({ page }) => {
await page.goto('/login')
await page.fill('[data-testid="email"]', 'admin@example.com')
await page.fill('[data-testid="password"]', 'admin123')
await page.click('[data-testid="submit-btn"]')
await expect(page).toHaveURL('/dashboard')
await expect(page.locator('.welcome')).toContainText('欢迎回来')
})
})
このパターンは大規模プロジェクトで非常に実用的で、メンテナンスコストを大幅に削減できます。
実践事例
実際のプロジェクトでの使い方はより複雑になります:
javascript
import { render, screen, waitFor } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { LoginForm } from './LoginForm'
describe('LoginForm', () => {
it('提交有效的登录表单', async () => {
const onSubmit = jest.fn()
render(<LoginForm onSubmit={onSubmit} />)
await userEvent.type(screen.getByLabelText(/邮箱/), 'user@example.com')
await userEvent.type(screen.getByLabelText(/密码/), 'password123')
await userEvent.click(screen.getByRole('button', { name: /登录/ }))
await waitFor(() => {
expect(onSubmit).toHaveBeenCalledWith({
email: 'user@example.com', password: 'password123'
})
})
})
})
このアプローチにより、コードのテスト可能性とスケーラビリティの両方が向上します。
パフォーマンス最適化
以下は完全な例です:
javascript
import { test, expect } from '@playwright/test'
test.describe('用户登录流程', () => {
test('成功登录跳转到首页', async ({ page }) => {
await page.goto('/login')
await page.fill('[data-testid="email"]', 'admin@example.com')
await page.fill('[data-testid="password"]', 'admin123')
await page.click('[data-testid="submit-btn"]')
await expect(page).toHaveURL('/dashboard')
await expect(page.locator('.welcome')).toContainText('欢迎回来')
})
})
境界条件の処理に注意してください。これは本番環境において非常に重要です。
まとめ
- コード例は参考のみであり、ビジネスシナリオに応じて調整が必要です
- Playwright 1.28 新功能总结は銀の弾丸ではなく、プロジェクトの規模と技術スタックに応じて選択する必要があります
- APIを暗記するよりも、基盤となる原理を理解する方が重要です