Xin chào tất cả mọi người!
Đọc email trong các bài kiểm tra tự động là một thủ thuật mà bạn có thể cần biết cách thực hiện trong nhiều dự án. Đây là lý do và cách giải quyết nó…
Chà, nếu hệ thống gửi email - bạn có thể muốn xác minh rằng chúng đang được gửi và nội dung đúng, bao gồm cả các liên kết có thể nhấp vào.
Vì vậy, đây là những tình huống thông thường khi bạn cần điều này:
Đăng ký.
Rất nhiều nền tảng gửi email xác nhận sau khi bạn tạo tài khoản và bạn cần nhấp vào liên kết xác nhận từ email.
Hóa đơn.
Nếu ứng dụng của bạn thực hiện bất kỳ khoản thanh toán nào - họ thường gửi séc hoặc hóa đơn qua email, vì vậy bạn cũng có thể muốn xem liệu nội dung của họ có chính xác hay không.
Kết quả.
Giống như kết quả xét nghiệm y tế. Theo kinh nghiệm của tôi - một số bệnh viện gửi email kèm theo kết quả xét nghiệm sau khi hoàn thành (hoặc ít nhất là một liên kết đến trang cá nhân nơi bạn có thể xem báo cáo).
…
Tất nhiên, đây không phải là danh sách đầy đủ - đây chỉ là những trường hợp sử dụng mà tôi gặp nhiều nhất trong sự nghiệp của mình.
Việc không xác minh các trường hợp này có thể dẫn đến việc người dùng không nhận được email hoặc nhận được thông tin sai trong email. Trong một trong các dự án, nó đã giúp chúng tôi tìm thấy sớm mã thông báo SendGrind đã hết hạn.
Đọc email là một việc khó nhưng không phải là không thể.
Các ứng dụng email ban đầu sử dụng POP3 để tìm nạp email từ máy chủ nhưng có một vấn đề nhỏ - nó sẽ xóa email khỏi máy chủ sau khi chúng được tải xuống.
Sau đó, giao thức IMAP xuất hiện - nó cho phép bạn chỉ cần đọc email từ máy chủ.
Vấn đề là -
Mặt khác, một số dịch vụ như Gmail cung cấp API REST để thao tác email của bạn, nhưng có một vấn đề khác - tài liệu và thư viện của nó không thực sự thân thiện với người dùng (đặc biệt đối với những người không làm việc nhiều với việc kiểm tra email).
Đây là lúc gmail-getter xuất hiện - một thư viện npm cho phép bạn đọc email và thậm chí mở chúng trong trình duyệt nếu bạn sử dụng các công cụ tự động hóa trình duyệt như Playwright .
Điều đầu tiên trước tiên - bạn cần cài đặt gói trong dự án của mình:
npm install gmail-getter
Để đăng nhập vào API Gmail, bạn cần có thông tin xác thực: ID khách hàng , Bí mật khách hàng và Mã thông báo làm mới . Những thông tin xác thực này cho phép bạn nhận được mã thông báo Truy cập, được yêu cầu trong các yêu cầu tiếp theo (chẳng hạn như nhận danh sách email hoặc một email, v.v.).
Các bước để đi:
Tạo một dự án trong Google Cloud Console .
Tạo thông tin xác thực OAuth trong phần API & Dịch vụ ( tốt nhất là chọn Ứng dụng dành cho máy tính để bàn ở đó nếu bạn cần để kiểm tra tự động ) và tải xuống.
Kích hoạt API Gmail .
Nhận mã thông báo Làm mới.
Để nhận mã thông báo Làm mới - chỉ cần thực hiện lệnh trong thư mục gốc của dự án:
npx gmail-getter get-refresh-token
(hoặc bất cứ nơi nào khác nếu bạn đã cài đặt gói trên toàn cầu)
get-refresh-token
Bạn phải đặt tệp credentials.json
ở nơi bạn sẽ thực thi lệnh.
⚠️ tên tệp thông tin xác thực có phân biệt chữ hoa chữ thường ⚠️
Sau khi cấu hình xong, bạn phải nhận được mã thông báo Access trong các thử nghiệm tự động của mình. Tôi muốn nói rằng nơi tốt nhất cho nó là thiết lập toàn cục (một chức năng thực thi trước khi quá trình chạy thử bắt đầu).
Vì vậy, nó sẽ giống như thế này:
import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) }
Ví dụ trên sử dụng các biến môi trường, vì vậy bạn chắc chắn cũng sẽ cần phải cài đặt gói dotenv .
Tuy nhiên, nếu bạn muốn mọi thứ đơn giản - bạn có thể sử dụng đoạn mã này ở bất cứ nơi nào bạn cần mã thông báo để có thể truy cập được từ đó:
const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )
Hiện tại, API REST của Gmail sử dụng ngôn ngữ truy vấn riêng để tìm email bạn cần:
const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')
Lệnh trên trả về cho bạn một đối tượng email nhưng bạn vẫn cần lấy nội dung hoặc liên kết của nó. Thay thế from:squier7 subject:Test!
vào truy vấn của riêng bạn theo cú pháp từ liên kết ở trên ☝️
Bạn có thể phân tích một liên kết bằng biểu thức chính quy :
const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)
Thay thế /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im
bằng biểu thức chính quy của riêng bạn ☝️
HOẶC lấy toàn bộ nội dung HTML của email và hiển thị nó trong trình duyệt của bạn:
import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser })
Tôi nghĩ khá rõ ràng rằng làm việc với email trong các bài kiểm tra tự động có thể khó khăn! Nhưng biết những thủ thuật này sẽ khiến mọi việc trở nên dễ dàng hơn nhiều.
Bạn vẫn có thể sử dụng một số dịch vụ email khác hoặc thử IMAP , nhưng tôi đảm bảo với bạn - việc này sẽ không dễ dàng như trong hướng dẫn này vì bạn cần tạo một công cụ trợ giúp của riêng mình, chẳng hạn như gmail-getter được cung cấp đây.
Bạn có thể tìm thấy ví dụ về Nhà viết kịch trên GitHub . Ví dụ về cây bách cũng vậy.