CYBERSOFT
Đăng nhập

Tự động kiểm thử responsive & giả lập thiết bị di động cho người mới (có code Playwright 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·👁 177 lượt xem👤 321 người đọc

Bài cho người mới: tự động kiểm thử responsive & giả lập thiết bị di động qua app TMĐT ShopEasy. Dùng Playwright devices['iPhone 13']/devices['Pixel 5'], viewport tuỳ chỉnh, so sánh layout mobile vs desktop, mô phỏng chạm/cuộn, hai tình huống thật (menu che nút bấm, bảng giá tràn ngang), 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 & màn hình bạn sẽ test

⭐ TL;DR — Tự động kiểm thử responsive là kiểm tra giao diện web hiển thị và hoạt động đúng ở nhiều kích thước màn hình, còn giả lập thiết bị (device emulation) là cách Playwright 'đóng giả' iPhone, Pixel... mà không cần phần cứng thật. Bài này bám bản mobile của app TMĐT ShopEasy: bạn học dùng devices['iPhone 13']/devices['Pixel 5'], đổi viewport tuỳ chỉnh, kiểm layout mobile vs desktop, mô phỏng chạm và cuộn. 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ế để 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! Ngày nay phần lớn khách hàng mở web bằng điện thoại chứ không phải máy tính, nên nếu chỉ test trên màn hình desktop quen thuộc của mình, bạn đang bỏ sót phần lớn trải nghiệm thực tế. Playwright cho phép mô phỏng hàng chục thiết bị di động phổ biến ngay trong code, không cần sở hữu iPhone hay Pixel thật, không cần cài app điều khiển thiết bị phức tạp. Chúng ta sẽ học qua bản mobile thật của ShopEasy — trang sản phẩm và giỏ hàng — có hình minh hoạ và code Playwright chạy được, dùng cả devices preset lẫn viewport tuỳ chỉnh.

Bảng thiết bị & viewport thường dùng khi test responsive Thiết bịĐộ phân giải (CSS px)LoạiPreset PlaywrightiPhone 13390 x 844Điện thoại · iOSdevices['iPhone 13']Pixel 5393 x 851Điện thoại · Androiddevices['Pixel 5']iPad Mini768 x 1024Máy tính bảngdevices['iPad Mini']Mobile nhỏ (tuỳ chỉnh)360 x 780Điện thoại phổ thôngpage.setViewportSize()Laptop nhỏ (tuỳ chỉnh)1280 x 800Desktoppage.setViewportSize()Full HD (tuỳ chỉnh)1920 x 1080Desktoppage.setViewportSize()Không có 1 kích thước 'chuẩn' duy nhất — chọn nhóm thiết bị/viewport khớp với dữ liệu người dùng thật của sản phẩm.
Bảng thiết bị & viewport thường gặp: từ điện thoại nhỏ tới desktop Full HD
📖 Responsive testing: kiểm tra giao diện web hiển thị và hoạt động đúng ở nhiều kích thước màn hình khác nhau, không chỉ riêng màn hình bạn đang code.

2. Vấn đề: web chạy tốt trên desktop nhưng vỡ trên mobile

Hãy hình dung đội dev ShopEasy phát triển và tự kiểm tra trang sản phẩm trên laptop 15 inch — mọi thứ đều đẹp: nút bấm rõ ràng, menu hiện đầy đủ, không phần tử nào bị che. Nhưng khi khách hàng thật mở cùng trang đó trên iPhone, một thanh menu di động (sticky) lại phủ lên một phần nút 'Thêm vào giỏ hàng', khiến người dùng khó bấm trúng, thậm chí bấm nhầm sang mục khác.

ShopEasy Mobile · Trang sản phẩm (iPhone 13 · 390×844) Số lượng 1Thêm vào giỏ hàng☰ Menu di động (sticky) Vùng chạm: ô số lượng, cần đủ 44x44px BUG: menu sticky che một phần nút Thêm vào giỏ
Màn hình test: trang sản phẩm ShopEasy trên iPhone 13, chú thích lỗi menu che nút Thêm vào giỏ

Vấn đề không nằm ở việc dev 'làm ẩu' — mà ở việc quy trình test chỉ chạy trên 1 kích thước màn hình duy nhất. Web hiện đại dùng CSS responsive (flexbox, media query, breakpoint) để tự đổi bố cục theo kích thước màn hình, nhưng chính sự 'tự đổi' đó lại là nguồn lỗi: một phần tử ẩn/hiện sai điều kiện, một breakpoint tính sai, hay một thanh sticky mới thêm vào không tính tới không gian còn lại trên màn hình nhỏ. Những lỗi này gần như vô hình nếu bạn chỉ test trên desktop, và chỉ lộ ra khi có ai đó — người dùng thật, hoặc automation — mở đúng ở kích thước mobile.

📖 Breakpoint: một mốc chiều rộng màn hình mà tại đó CSS đổi cách bố trí giao diện (ví dụ dưới 768px chuyển sang bố cục 1 cột).

3. Kiểm thử responsive & giả lập thiết bị là gì, nguyên tắc cốt lõi

Nguyên tắc cốt lõi rất đơn giản: thay vì chạy test 1 lần ở 1 kích thước, bạn chạy CÙNG một kịch bản test ở NHIỀU kích thước màn hình khác nhau — điện thoại nhỏ, điện thoại lớn, máy tính bảng, desktop — rồi kiểm tra xem giao diện có đúng ở từng nơi hay không. Playwright hỗ trợ điều này qua 2 cơ chế bổ trợ nhau: devices có sẵn (mô phỏng đúng một thiết bị thật, gồm cả user-agent và khả năng cảm ứng) và viewport tuỳ chỉnh (chỉ đổi kích thước màn hình, linh hoạt cho việc thử nhiều mức breakpoint).

So sánh render: ShopEasy giỏ hàng ở Mobile (390px) và Desktop (1280px) Tiêu chíMobile · 390pxDesktop · 1280pxMenu điều hướngThu gọn thành icon ☰, mở dạng overlay toàn màn hìnhHiện đầy đủ dạng thanh ngangDanh sách sản phẩm trong giỏXếp dọc, 1 cột, ảnh nhỏ hơnXếp dạng bảng nhiều cộtNút Thanh toánCố định (sticky) ở đáy màn hình để luôn thấy đượcNằm cuối trang, không cần stickyVùng chạm nút bấmTối thiểu 44x44px để ngón tay bấm chính xácCó thể nhỏ hơn vì dùng chuột trỏ chính xácBảng giá chi tiếtDễ tràn ngang nếu không cuộn/thu gọn cộtĐủ chỗ hiển thị hết cột mà không trànCùng 1 trang giỏ hàng nhưng hành vi kỳ vọng khác nhau theo kích thước màn hình — đây chính là thứ automation cần kiểm tra.
So sánh render cùng 1 màn hình giỏ hàng ShopEasy ở Mobile 390px và Desktop 1280px

Nói cách khác, đây không phải là kiểm thử một tính năng mới — mà là kiểm thử LẠI cùng một tính năng đã đúng ở desktop, dưới một 'điều kiện' khác: kích thước màn hình khác, có thể kèm khả năng chạm thay vì chuột. Ai muốn học automation bài bản, không chỉ đọc lý thuyết mà thực hành trên dự án thật cùng mentor, có thể tham khảo khoá học tại https://cybersoft.edu.vn/software-testing-chuyen-nghiep-tu-zero-toi-duoc-nhan-viec-manual-automation-testing/ — nơi các chủ đề như responsive testing được dạy song song với automation nền tảng.

💡 Đừng chỉ test đúng 1 kích thước mobile. Chọn ít nhất 1 điện thoại nhỏ, 1 điện thoại lớn, 1 máy tính bảng và 1 desktop — vì lỗi layout thường chỉ lộ ở đúng vài mốc kích thước hẹp gần breakpoint.

4. Playwright devices: iPhone 13, Pixel 5 & cấu hình dự án

Playwright đóng gói sẵn hàng chục thiết bị phổ biến trong đối tượng devices, mỗi thiết bị là 1 object gồm viewport, userAgent, deviceScaleFactor, isMobile, hasTouch... Cách dùng gọn nhất trong dự án thật là khai báo mỗi thiết bị thành 1 'project' riêng trong playwright.config.js — khi đó Playwright sẽ tự chạy TOÀN BỘ bộ test lần lượt (hoặc song song) trên từng project, không cần sửa gì trong file test.

Cấu hình 'projects' mô phỏng thiết bị trong playwright.config.js ProjectThiết bị mô phỏngMục đích kiểm thửmobile-iphonedevices['iPhone 13']Kiểm layout & chạm trên Safari iOS giả lậpmobile-pixeldevices['Pixel 5']Kiểm layout & chạm trên Chrome Android giả lậptablet-ipaddevices['iPad Mini']Kiểm layout ở kích thước trung giandesktop-chromeviewport tuỳ chỉnh 1280x800, không dùng devicesSo sánh với bản desktop làm mốc đối chiếuMỗi project chạy TOÀN BỘ bộ test trên đúng 1 kiểu thiết bị/viewport — Playwright tự chạy song song các project.
Cấu hình nhiều 'projects' mô phỏng iPhone 13, Pixel 5, iPad Mini và desktop trong cùng 1 file config
javascript
// playwright.config.js
const { defineConfig, devices } = require('@playwright/test');

module.exports = defineConfig({
  testDir: './tests',
  fullyParallel: true,
  projects: [
    {
      name: 'mobile-iphone',
      use: { ...devices['iPhone 13'] },
    },
    {
      name: 'mobile-pixel',
      use: { ...devices['Pixel 5'] },
    },
    {
      name: 'tablet-ipad',
      use: { ...devices['iPad Mini'] },
    },
    {
      name: 'desktop-chrome',
      use: { viewport: { width: 1280, height: 800 } },
    },
  ],
});
🔒

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!