Skip to main content

5. Nâng cao

Chụp màn hình

Chụp màn hình để lưu giữ lại

import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page }) => {
await page.goto('https://aptech-tester.web.app/login');
});

test('Screenshot - Capture', async ({ page }) => {
await page.locator('#login-form_username').fill('admin');
await page.locator('#login-form_password').fill('');
await page.locator('button:has-text("Đăng nhập")').click();
await page.waitForTimeout(500);

// Chụp màn hình để lưu giữ lại
await page.screenshot({ path: './tests/screen-shots/TC-LOGIN-REQUIRED-PASSWORD.png' });
});

Chụp màn hình để so sánh

import { test, expect } from '@playwright/test';

test('TC1: Screenshot - Compare', async ({ page }) => {
await page.locator('#login-form_username').fill('admin');
await page.locator('#login-form_password').fill('');
await page.locator('button:has-text("Đăng nhập")').click();
await page.waitForTimeout(500);

// Kiểm tra theo ảnh chụp
// So sánh ảnh chụp với ảnh đã lưu trước đó
const screenshot = await page.screenshot({ path: './tests/screen-shots/TC-LOGIN-REQUIRED-PASSWORD-Round2.png' });

await page.waitForTimeout(500);

// Kiểm tra ảnh chụp có khớp với ảnh đã lưu trước đó không?
expect(screenshot).toMatchSnapshot({
name: './tests/screen-shots/TC-LOGIN-REQUIRED-PASSWORD.png',
});
});

Đọc dữ liệu từ file csv

Cấu trúc file csv

"username","password"
"admin","Tester@123"
"admin1","Tester@123"
"admin2","Tester@123"
"admin3","Tester@123"
"admin4","Tester@123"
"admin5","Tester@123"
"admin6","Tester@123"
"admin7","Tester@123"

Cài đặt thư viện

Tại của sổ termial cài thư viện csv-parse:

npm install csv-parse --save

Ví dụ

import
import { test, expect } from '@playwright/test';

import fs from 'fs';
import path from 'path';
import { parse } from 'csv-parse/sync';
// Đọc file csv
const records = parse(fs.readFileSync(path.join(__dirname, 'accounts.csv')), {
columns: true, // Tự động đọc header
delimiter: ',', // Dấu phân cách
skip_empty_lines: true, // Bỏ qua dòng trống
trim: true, // Loại bỏ khoảng trắng thừa
bom: true, // Xử lý UTF-8 BOM
}) as any[];
test.beforeEach(async ({ page }) => {
// Go to https://aptech-tester.web.app/login
await page.goto('https://aptech-tester.web.app/login');
});
// Lặp qua từng dòng khi đọc được
let index = 0;
for (const record of records) {
index += 1;
// Tạo test case cho từng dòng dữ liệu
test('Login thành công: ' + record.username, async ({ page }) => {
await page.goto('https://aptech-tester.web.app/login');

await page.locator('#login-form_username').fill(record.username);
await page.locator('#login-form_password').fill(record.password);

await page.locator('#login-form > div:nth-child(4) > div > div > div > div > button').click();

// Wait for 500ms
await page.waitForTimeout(500);
await expect(page).toHaveURL('https://aptech-tester.web.app/home');
});
}