CYBERSOFT
Đăng nhập

Kiểm thử đa trình duyệt (cross-browser) cho người mới: chạy song song trên Chromium/Firefox/WebKit (có code chạy được)

Chuyên công nghệNền tảngNgười mớiChuẩn SEO
🗓 1 tháng trước19 phút đọc·👁 1,691 lượt xem👤 457 người đọc

Bài cho người mới: học kiểm thử đa trình duyệt (cross-browser testing) qua app TMĐT ShopEasy. Ba engine Chromium/Firefox/WebKit của Playwright, cấu hình 'projects', chạy test theo từng trình duyệt và chạy song song, giả lập viewport/thiết bị di động, hai tình huống thật (lỗi Safari lọt ra production, chạy tuần tự quá lâu chuyển sang song song), nhiều mockup giao diện, FAQ và trắc nghiệm 5 câu. Chuẩn SEO, dẫn về khóa Tester CyberSoft.

1. Tóm tắt nhanh & vì sao cần kiểm thử đa trình duyệt

⭐ TL;DR — Kiểm thử đa trình duyệt (cross-browser testing) là chạy CÙNG một kịch bản test trên nhiều trình duyệt khác nhau — Chrome, Firefox, Safari — để chắc chắn ứng dụng hoạt động đúng ở mọi nơi khách hàng thật sự dùng, không chỉ trên trình duyệt bạn quen code. Bài này bám app TMĐT ShopEasy: bạn học cách Playwright hỗ trợ 3 engine Chromium/Firefox/WebKit qua cấu hình 'projects', cách chạy test song song trên cả 3, và cách giả lập viewport/thiết bị di động (Pixel 5, iPhone 13). AI đã tổng hợp và hệ thống hoá bài học từ hàng trăm dự án automation thực tế, giúp bạn học nhanh hơn nhiều so với tự mò từng chi tiết. Có nhiều hình minh hoạ, code Playwright chạy được và trắc nghiệm cuối bài.

Chào bạn mới! Khi vừa học automation, phản xạ tự nhiên là viết test rồi chạy thử trên trình duyệt mặc định của máy mình — thường là Chrome. Test pass, bạn yên tâm merge code. Nhưng khách hàng thật của ShopEasy không chỉ dùng Chrome: có người dùng Safari trên iPhone, có người dùng Firefox vì thói quen, có người dùng Edge tại công ty. Nếu chỉ test trên 1 trình duyệt, bạn đang bỏ sót phần lớn trải nghiệm thực tế của khách hàng. Kiểm thử đa trình duyệt giải quyết đúng vấn đề này: chạy cùng bộ test trên nhiều engine hiển thị khác nhau, phát hiện lỗi trước khi khách hàng là người phát hiện đầu tiên.

Ma trận trình duyệt cần kiểm thử · ShopEasy Trình duyệtTỉ lệ khách ShopEasy dùngEngine trong PlaywrightƯu tiênChrome / Edge (desktop)58%chromiumCaoSafari (macOS / iOS)22%webkitCaoFirefox (desktop)12%firefoxTrung bìnhSamsung Internet (Android)6%chromium (engine gần đúng)ThấpTrình duyệt khác2%-ThấpSố liệu mô phỏng theo thống kê truy cập ShopEasy — chọn trình duyệt để test dựa trên tỉ lệ khách hàng thật sự dùng, không phải trình duyệt bạn quen code.
Ma trận trình duyệt cần kiểm thử cho ShopEasy, theo tỉ lệ khách hàng thật sự dùng
📖 Cross-browser testing: chạy cùng một bộ test tự động trên nhiều trình duyệt/engine hiển thị khác nhau, để phát hiện lỗi chỉ xuất hiện ở một trình duyệt cụ thể.

2. Vấn đề: chỉ test trên 1 trình duyệt, lỗi lọt sang trình duyệt khác

Mỗi trình duyệt dùng một engine hiển thị (rendering engine) riêng: Chrome/Edge dùng Chromium (Blink), Firefox dùng Gecko, Safari dùng WebKit. Ba engine này được viết bởi ba đội ngũ khác nhau, tuân theo cùng chuẩn web nhưng không hoàn toàn giống nhau khi triển khai chi tiết — đặc biệt với các phần tử form 'native' như input type='date', select, hay cách trình duyệt xử lý font fallback, thanh cuộn, và một số thuộc tính CSS mới.

Với ShopEasy, ta đã gặp chuyện này thật: màn thanh toán dùng input type='date' cho ô 'Ngày giao hàng mong muốn'. Trên Chrome/Chromium, ô này hiển thị định dạng và bộ chọn lịch quen thuộc. Nhưng trên WebKit (Safari), cách hiển thị và cách người dùng gõ tay ngày tháng lại khác — nếu code JavaScript của ShopEasy giả định định dạng cố định kiểu Chrome, việc parse ngày trên Safari có thể sai lệch mà test chạy trên Chrome không bao giờ phát hiện ra, vì test đó... chưa từng chạy trên Safari.

📖 Rendering engine (engine hiển thị): phần mềm lõi bên trong trình duyệt chịu trách nhiệm 'vẽ' HTML/CSS thành giao diện, và thực thi JavaScript — mỗi trình duyệt lớn dùng một engine khác nhau.

3. Ba engine mà Playwright hỗ trợ: Chromium, Firefox, WebKit

Điểm mạnh lớn nhất của Playwright cho cross-browser testing là nó cài sẵn và điều khiển trực tiếp CẢ BA engine hiển thị chính của web, không cần cài đặt driver rời cho từng trình duyệt như một số công cụ automation cũ. Chromium đại diện cho Chrome/Edge/Brave (nhóm trình duyệt chiếm thị phần lớn nhất), Firefox đại diện chính nó (engine Gecko), và WebKit đại diện cho Safari trên cả macOS và iOS.

Vì Playwright điều khiển engine trực tiếp (không thông qua trình duyệt Chrome/Firefox/Safari cài đặt sẵn trên máy bạn), phiên bản engine được Playwright quản lý và tải về đồng bộ mỗi khi bạn chạy npx playwright install. Điều này giúp kết quả test ổn định giữa máy bạn và máy CI — cả hai đều dùng đúng phiên bản engine như nhau, tránh tình trạng 'chạy được trên máy tôi' nhưng lỗi trên CI chỉ vì phiên bản trình duyệt khác nhau.

💡 Muốn học bài bản cả automation lẫn cross-browser testing với dự án thực tế, không chỉ đọc lý thuyết, một khoá học có mentor hướng dẫn từng bước như https://cybersoft.edu.vn/software-testing-chuyen-nghiep-tu-zero-toi-duoc-nhan-viec-manual-automation-testing/ sẽ giúp bạn rút ngắn thời gian tự mò mẫm rất nhiều.

4. Cấu hình projects trong playwright.config.js (thực hành)

Trong Playwright, mỗi trình duyệt/thiết bị muốn test được khai báo thành một 'project' trong file playwright.config.js. Khi bạn chạy npx playwright test mà không chỉ định project, Playwright sẽ tự chạy TOÀN BỘ bộ test trên TỪNG project khai báo — bạn không cần viết lại kịch bản test cho từng trình duyệt.

▶ Bước 1: Mở playwright.config.js, import { devices } từ '@playwright/test'.

▶ Bước 2: Khai báo mảng projects với 3 phần tử desktop: chromium, firefox, webkit, mỗi phần tử set use: { ...devices['Desktop ...'] }.

▶ Bước 3: Thêm 2 project mô phỏng di động: 'Mobile Chrome' dùng devices['Pixel 5'], 'Mobile Safari' dùng devices['iPhone 13'].

javascript
// playwright.config.js
const { defineConfig, devices } = require('@playwright/test');

module.exports = defineConfig({
  testDir: './tests',
  fullyParallel: true,
  retries: 1,
  use: {
    baseURL: 'https://shopeasy.vn',
    trace: 'on-first-retry',
  },
  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
    { name: 'webkit', use: { ...devices['Desktop Safari'] } },
    { name: 'Mobile Chrome', use: { ...devices['Pixel 5'] } },
    { name: 'Mobile Safari', use: { ...devices['iPhone 13'] } },
  ],
});
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 24% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!