Skip to content

Playwright 2025 新機能

Playwright 2025 新機能は、フロントエンド開発においてますます広く活用されています。本記事では、実際のプロジェクトを起点に、その核心的な原理とベストプラクティスを深く解説します。

基本的な使い方

次の方法で改善できます:

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("欢迎回来");
  });
});

このパターンは大規模プロジェクトで非常に実用的で、メンテナンスコストを大幅に削減できます。

パフォーマンス最適化

実際のプロジェクトでは、より複雑な使い方が求められます:

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 2025 新機能は銀の弾丸ではなく、プロジェクト規模や技術スタックに応じて選択する必要がある
  • API を覚えるより、根本的な原理を理解することが重要

MIT Licensed