Thử nghiệm toàn diện cho Tiện ích của Chrome

Kiểm thử toàn diện liên quan đến việc tạo và tải một gói tiện ích vào trình duyệt. Công cụ kiểm thử giao tiếp với trình duyệt để tự động hoá các hoạt động tương tác và kiểm thử cùng một quy trình mà người dùng sẽ trải qua. Thường thì thư viện hỗ trợ kiểm thử toàn diện sẽ cung cấp các cách kiểm soát trình duyệt, mô phỏng hoạt động đầu vào của người dùng và quan sát trạng thái hiện tại của bất kỳ trang nào đang mở.

Hãy xem bài viết Kiểm thử tiện ích Chrome bằng Puppeteer để biết hướng dẫn và bài viết Kiểm thử đơn vị để biết thông tin chi tiết về cách viết mã kiểm thử đơn vị cho tiện ích Chrome.

Sử dụng thư viện kiểm thử trình duyệt

Các tiện ích được hàng loạt thư viện kiểm thử hỗ trợ.

Thư viện Hướng dẫn
Người huấn luyện / Người soạn kịch Xem Tiện ích của Chrome (Puppeteer / Playwright).
Selen Sử dụng đối tượng ChromeOptions để tải tiện ích. Bạn có thể xem thêm thông tin tại đây.
WebDriverIO Xem phần Kiểm thử tiện ích web.

Chạy kiểm thử trong Chrome không có giao diện người dùng

Khi chạy các chương trình kiểm thử trong quy trình làm việc tự động, thông thường, bạn cần phải tải tiện ích trên một máy không có màn hình. Chế độ không có giao diện người dùng mới của Chrome cho phép Chrome chạy trong môi trường không có người giám sát như thế này. Khởi động Chrome bằng cờ --headless=new (chế độ không có giao diện người dùng hiện mặc định là "cũ", không hỗ trợ tải tiện ích). Tuỳ thuộc vào công cụ tự động hoá mà bạn chọn, có thể có một chế độ cài đặt tự động thêm cờ cho bạn.

Đặt mã nhận dạng tiện ích

Thông thường, bạn nên có mã nhận dạng tiện ích cố định trong các bài kiểm thử. Điều này giúp nhiều thao tác phổ biến trở nên dễ dàng hơn, chẳng hạn như thêm nguồn gốc của tiện ích vào danh sách cho phép trên máy chủ mà tiện ích cần giao tiếp hoặc mở các trang tiện ích trong kiểm thử. Để thực hiện việc này, hãy làm theo các bước trong phần Duy trì mã tiện ích nhất quán.

Kiểm thử trang tiện ích

Bạn có thể truy cập vào các trang tiện ích bằng URL tương ứng, ví dụ: chrome-extension://<id>/index.html. Sử dụng các phương thức điều hướng thông thường có trong công cụ tự động hoá mà bạn chọn để điều hướng đến các URL này.

Kiểm thử cửa sổ bật lên của tiện ích

Hiện tại, bạn không thể mở cửa sổ bật lên của phần mở rộng trong ngữ cảnh của một trang khác. Thay vào đó, hãy mở URL của cửa sổ bật lên trong một thẻ mới. Nếu cửa sổ bật lên sử dụng thẻ đang hoạt động, hãy cân nhắc việc triển khai một cơ chế ghi đè để có thể truyền rõ ràng mã thẻ đến cửa sổ bật lên. Ví dụ:

const URL_PARAMS  = new URLSearchParams(window.location.search);

async function getActiveTab() {
  // Open popup.html?tab=5 to use tab ID 5, etc.
  if (URL_PARAMS.has("tab")) {
    return parseInt(URL_PARAMS.get("tab"));
  }

  const tabs = await chrome.tabs.query({
    active: true,
    currentWindow: true
  });

  return tabs[0];
}

Kiểm tra trạng thái của phần mở rộng

Để tránh kiểm thử không thành công khi bạn thay đổi hành vi nội bộ của tiện ích, tốt nhất bạn nên tránh truy cập vào trạng thái nội bộ trong kiểm thử tích hợp. Thay vào đó, bạn nên dựa vào những gì người dùng nhìn thấy để kiểm thử. Tuy nhiên, đôi khi bạn có thể muốn truy cập trực tiếp vào dữ liệu từ tiện ích. Trong những trường hợp này, hãy cân nhắc việc thực thi mã trong ngữ cảnh của một trang tiện ích.

Trong Puppeteer:

const workerTarget = await browser.waitForTarget(
  target => target.type() === 'service_worker'
);
const worker = await workerTarget.worker();

const value = await worker.evaluate(() => {
  chrome.storage.local.get('foo');
});

Trong Selenium:

// Selenium doesn't allow us to access the service worker, so we need to open an extension page where we can execute the code
await driver.get('chrome-extension://<id>/popup.html');
await driver.executeAsyncScript(
  'const callback = arguments[arguments.length - 1];' +
  'chrome.storage.local.get(\'foo\').then(callback);'
);

Kiểm thử việc chấm dứt trình chạy dịch vụ

Để tìm hiểu về cách kiểm thử việc chấm dứt trình chạy dịch vụ, hãy xem bài viết kiểm thử việc chấm dứt trình chạy dịch vụ bằng Puppeteer. Chúng tôi cũng có mẫu cho Puppeteer và Selenium.

Xin lưu ý rằng khi sử dụng một số khung kiểm thử, trình chạy dịch vụ có thể không tự động chấm dứt như khi sử dụng bình thường. Đây là trường hợp của Selenium. Công cụ này dựa vào ChromeDriver để đính kèm trình gỡ lỗi vào tất cả worker dịch vụ nhằm ngăn chặn việc dừng các worker đó.