update
Some checks failed
Spell Check / Spell Check with Typos (push) Failing after 6s

This commit is contained in:
Linpiing 2025-05-22 09:17:46 +07:00 committed by Methapon2001
parent 0150f80ba2
commit 272183bca9
77 changed files with 9957 additions and 144 deletions

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');
@ -105,7 +105,7 @@ test('Create Branch Managenment', async () => {
await page.fill("(//input[@id='default-input-address-en'])[2]", '20/02');
await page.fill("(//input[@aria-label='Moo'])[2]", '1');
//ส่วนบัญชีธนาคาร
//ส่วนบัญชีธนาคาร
await page.click("(//input[@id='select-bankbook'])[3]");
await page.click('id=select-bankbook_1');
await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '1202282262226');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -17,7 +17,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -13,7 +13,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -13,7 +13,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -13,7 +13,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -17,7 +17,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -18,7 +18,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -17,7 +17,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
await page.close();
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -1,9 +1,10 @@
import { test, expect, Page } from '@playwright/test';
import { strictEqual } from 'assert';
import fs from 'fs';
import fs, { writeFileSync } from 'fs';
import path from 'path';
let page: Page;
let isLoginSuccessful = false;
test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
@ -15,63 +16,76 @@ test.afterAll(async () => {
}
});
async function login(page: Page) {
try {
// Login
await page.goto('http://192.168.1.62:20101/');
await expect(page).toHaveTitle(/^Sign in to /);
await page.fill("input[name='username']", 'admin');
await page.fill("input[name='password']", '1234');
await page.click('id=kc-login');
await page.waitForTimeout(2000);
// await page.click('id=acceptBtn');
// เข้าสู่เมนูลูกค้า
await page.click('id=menu.manage');
await page.waitForSelector('id=sub-menu-customer');
await page.click('id=sub-menu-customer');
await page.waitForTimeout(2000);
isLoginSuccessful = true;
console.log('Login สำเร็จ');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการ Login', error);
isLoginSuccessful = false;
}
}
test('Login', async () => {
// Login
await page.goto('http://chamomind.ddns.net:20001/');
await expect(page).toHaveTitle(/^Sign in to /);
await page.fill("input[name='username']", 'admin');
await page.fill("input[name='password']", '1234');
await page.click('id=kc-login');
await page.waitForTimeout(2000);
// await page.click('id=acceptBtn');
await login(page);
});
test('สร้างลูกจ้างในสาขา', async () => {
const names = [
{
firstName: 'อริญา',
lastName: 'จิตรเกียรติ',
firstNameEn: 'Arinya',
lastNameEn: 'Jitkiat',
},
{
firstName: 'เกียรติศักดิ์',
lastName: 'อำนวย',
firstNameEn: 'Kiatsakd',
lastNameEn: 'Amnuy',
},
{
firstName: 'ภัทรพล',
lastName: 'รุ่งโรจน์',
firstNameEn: 'Phatthapon',
lastNameEn: 'Rungroj',
},
{
firstName: 'ศิริพร',
lastName: 'พงษ์รัตน์',
firstNameEn: 'Siriporn',
lastNameEn: 'Phongrat',
},
{
firstName: 'กรกมล',
lastName: 'กิตติสมบัติ',
firstNameEn: 'Karakamon',
lastNameEn: 'Kittisombat',
},
];
// เข้าสู่เมนูลูกค้า
await page.click('id=menu.manage');
await page.waitForSelector('id=sub-menu-customer');
await page.click('id=sub-menu-customer');
await page.click(
"//td[contains(.,'บริษัท เทคโนโลยีอินโนเวต จำกัดInnovative Technology Co., Ltd.')]",
);
await page.click("//table[@class='q-table']/tbody[1]/tr[3]/td[6]/button[1]");
if (!isLoginSuccessful) {
await login(page);
}
try {
const names = [
{
firstName: 'เกียรติศักดิ์',
lastName: 'อำนวย',
firstNameEn: 'Kiatsakd',
lastNameEn: 'Amnuy',
},
{
firstName: 'ภัทรพล',
lastName: 'รุ่งโรจน์',
firstNameEn: 'Phatthapon',
lastNameEn: 'Rungroj',
},
{
firstName: 'ศิริพร',
lastName: 'พงษ์รัตน์',
firstNameEn: 'Siriporn',
lastNameEn: 'Phongrat',
},
{
firstName: 'กรกมล',
lastName: 'กิตติสมบัติ',
firstNameEn: 'Karakamon',
lastNameEn: 'Kittisombat',
},
];
await page.click(
"//td[contains(.,'บริษัท เอกซ์เซล อินโนเวชั่น จำกัดSiam Energy Solutions Co., Ltd.')]",
);
await page.click('id=btn-show-employee-บริษัท เอกซ์เซล อินโนเวชั่น จำกัด');
for (const user of names) {
await page.click("(//th[@class='text-right']//button)[2]");
await page.waitForSelector(
'id=บริษัท เอกซ์เซล อินโนเวชั่น จำกัด-btn-add-employee',
);
await page.click('id=บริษัท เอกซ์เซล อินโนเวชั่น จำกัด-btn-add-employee');
await page.click('id=form-employee-select-prefix-name');
await page.click('id=form-employee-select-prefix-name_0');
await page.fill('id=form-employee-input-first-name', user.firstName);
@ -82,8 +96,8 @@ test('สร้างลูกจ้างในสาขา', async () => {
// วันเกิด
await page.click('id=form-employee-input-birth-date');
await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]");
await page.click("//div[text()='2000']");
await page.click("//div[@id='2000-11-02']/div[1]");
await page.click("//div[text()='1999']");
await page.click("//div[@id='1999-12-02']/div[1]");
// สัญชาติ
await page.click('id=form-employee-select-nationality');
@ -98,27 +112,31 @@ test('สร้างลูกจ้างในสาขา', async () => {
});
test('สร้างลูกจ้างในสาขา 2', async () => {
const namestwo = [
{
firstName: 'สุทิน',
lastName: 'ภาณุวงศ์',
firstNameEn: 'Suthin',
lastNameEn: 'Phanuwong',
},
];
if (!isLoginSuccessful) {
await login(page);
}
// เข้าสู่เมนูลูกค้า
await page.click('id=menu.manage');
await page.waitForSelector('id=sub-menu-customer');
await page.click('id=sub-menu-customer');
await page.click(
"//td[contains(.,'บริษัท เทคโนโลยีอินโนเวต จำกัดInnovative Technology Co., Ltd.')]",
);
await page.click("//table[@class='q-table']/tbody[1]/tr[5]/td[6]/button[1]");
try {
const namestwo = [
{
firstName: 'สุทิน',
lastName: 'ภาณุวงศ์',
firstNameEn: 'Suthin',
lastNameEn: 'Phanuwong',
},
];
await page.click(
"//td[contains(.,'บริษัท เอกซ์เซล อินโนเวชั่น จำกัดSiam Energy Solutions Co., Ltd.')]",
);
await page.click('id=btn-show-employee-บริษัท เอกซ์เซล อินโนเวชั่น จำกัด');
for (const user of namestwo) {
await page.click("(//th[@class='text-right']//button)[3]");
await page.waitForSelector(
'id=บริษัท เอกซ์เซล อินโนเวชั่น จำกัด-btn-add-employee',
);
await page.click('id=บริษัท เอกซ์เซล อินโนเวชั่น จำกัด-btn-add-employee');
await page.click('id=form-employee-select-prefix-name');
await page.click('id=form-employee-select-prefix-name_0');
await page.fill('id=form-employee-input-first-name', user.firstName);
@ -129,8 +147,8 @@ test('สร้างลูกจ้างในสาขา 2', async () => {
// วันเกิด
await page.click('id=form-employee-input-birth-date');
await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]");
await page.click("//div[text()='2000']");
await page.click("//div[@id='2000-11-02']/div[1]");
await page.click("//div[text()='1999']");
await page.click("//div[@id='1999-12-02']/div[1]");
// สัญชาติ
await page.click('id=form-employee-select-nationality');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -18,7 +18,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -19,7 +19,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -18,7 +18,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -19,7 +19,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -18,7 +18,7 @@ test.afterAll(async () => {
});
//สร้าง Function สำหรับ Login
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -17,7 +17,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -16,7 +16,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -14,7 +14,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -15,7 +15,7 @@ test.afterAll(async () => {
}
});
async function login(page) {
async function login(page: Page) {
try {
// Login
await page.goto('/');

View file

@ -0,0 +1,804 @@
import { test, expect, Page } from '@playwright/test';
import { de, fakerEN, fakerTH } from '@faker-js/faker';
import { isAwaitExpression } from 'typescript';
let page: Page;
let isLoginSuccessful = false;
test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
});
test.afterAll(async () => {
if (page !== undefined) {
await page.close();
}
});
async function login(page: Page) {
try {
// Login
await page.goto('/');
await expect(page).toHaveTitle(/^Sign in to /);
await page.fill("input[name='username']", 'admin');
await page.fill("input[name='password']", '1234');
await page.click('id=kc-login');
await page.waitForTimeout(2000);
// await page.click('id=acceptBtn');
// เข้าสู่หน้าแม่แบบขั้นตอนการทำงาน
await page.click('id=menu.manage');
await page.waitForSelector('id=sub-menu-agencies');
await page.click('id=sub-menu-agencies');
// ถ้าทั้งหมดสำเร็จ
isLoginSuccessful = true;
console.log('ระบบทำการ Login สำเร็จ');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการ Login');
isLoginSuccessful = false;
}
}
test('Login', async () => {
await login(page);
});
test('TC_2_0_001', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่เมนูหน่วยงาน
const pageAgencies = page.locator(
"//span[contains(@class,'title-gradient text-weight-bold')]",
);
await expect(pageAgencies).toHaveText('หน่วยงาน');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงหน้าเมนูหน่วยงาน');
});
test('TC_2_0_002', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
await page.waitForSelector("(//input[@id='input-agencies-code'])[2]");
await page.click("(//input[@id='input-agencies-code'])[2]");
const dropdownAgenciesGroup = page.locator('id=input-agencies-code_lb');
await expect(dropdownAgenciesGroup).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงรายการเลือกกลุ่มหน่วยงาน');
await page.waitForSelector('id=btn-form-close');
await page.click('id=btn-form-close');
});
test('TC_2_0_003', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
const pageCreateAgencies = page.locator(
"//div[contains(@class,'col text-subtitle1')]",
);
await expect(pageCreateAgencies).toHaveText('เพิ่มหน่วยงาน');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงหน้าเพิ่มหน่วยงาน');
await page.waitForSelector('id=btn-form-close');
await page.click('id=btn-form-close');
});
test('TC_2_0_004', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
// ส่วนข้อมูลพื้นฐาน
await page.click("(//input[@id='input-agencies-code'])[2]");
await page.waitForSelector('id=input-agencies-code_2');
await page.click('id=input-agencies-code_2');
await page.fill(
"(//input[@id='input-agencies-name'])[2]",
'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of the Republic of Bulgaria in Thailand',
);
// ส่วนข้อมูลที่อยู่
await page.fill(
"(//input[@id='-input-address-no'])[2]",
'100/45 อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24',
);
await page.fill("(//input[@id='-input-street'])[3]", 'สุขุมวิท 21 (อโศก)');
await page.click("(//input[@id='-select-province'])[2]");
await page.waitForSelector('id=-select-province_1');
await page.click('id=-select-province_1');
// การเลือก Dropdown ที่อยู่ข้างล่าง
await page.click("(//input[@id='-select-district'])[2]"); // คลิกเปิด dropdown
await page.waitForSelector('#-select-district_lb', { state: 'visible' });
const targetOption = page.locator('[id="-select-district_40"]');
for (let i = 0; i < 10 && !(await targetOption.isVisible()); i++) {
await page
.locator('#-select-district_lb')
.evaluate((el) => (el.scrollTop += 150));
await page.waitForTimeout(100);
}
if (await targetOption.isVisible()) {
await targetOption.click();
console.log('✅ เลือกตัวเลือกสำเร็จ');
} else {
console.error('❌ ไม่พบตัวเลือกที่ต้องการ');
}
await page.click("(//input[@id='-select-sub-district'])[2]");
await page.waitForSelector('id=-select-sub-district_1');
await page.click('id=-select-sub-district_1');
await page.fill(
"(//input[@id='-input-address-en'])[2]",
'100/45 Ocean Tower 2, 24th Floor',
);
await page.waitForTimeout(1000);
await page.click("(//button[@id='btn-info-basic-save'])[2]");
const createAgencies = page.locator(
"//tr[contains(.,'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย') and contains (.,'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงคลองเตยเหนือ, เขตวัฒนา, จังหวัดกรุงเทพมหานคร, 10110')]",
);
await expect(createAgencies).toContainText(
'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await expect(createAgencies).toContainText(
'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงคลองเตยเหนือ, เขตวัฒนา, จังหวัดกรุงเทพมหานคร, 10110',
);
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบสามารถเพิ่มหน่วยงานได้');
});
test('TC_2_0_005', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
// ส่วนข้อมูลพื้นฐาน
await page.fill(
"(//input[@id='input-agencies-name'])[2]",
'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of the Republic of Bulgaria in Thailand',
);
// ส่วนที่อยู่
await page.fill(
"(//input[@id='input-agencies-name'])[2]",
'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of the Republic of Bulgaria in Thailand',
);
// ส่วนข้อมูลที่อยู่
await page.fill(
"(//input[@id='-input-address-no'])[2]",
'100/45 อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24',
);
await page.fill("(//input[@id='-input-street'])[3]", 'สุขุมวิท 21 (อโศก)');
await page.click("(//input[@id='-select-province'])[2]");
await page.waitForSelector('id=-select-province_1');
await page.click('id=-select-province_1');
// การเลือก Dropdown ที่อยู่ข้างล่าง
await page.click("(//input[@id='-select-district'])[2]"); // คลิกเปิด dropdown
await page.waitForSelector('id=-select-district_2');
await page.click('id=-select-district_2');
await page.click("(//input[@id='-select-sub-district'])[2]");
await page.waitForSelector('id=-select-sub-district_1');
await page.click('id=-select-sub-district_1');
await page.fill(
"(//input[@id='-input-address-en'])[2]",
'100/45 Ocean Tower 2, 24th Floor',
);
await page.waitForTimeout(1000);
await page.click("(//button[@id='btn-info-basic-save'])[2]");
//ตรวจสอบข้อผิดพลาดที่ต้องแสดง
const expectedErrors = [
{
locator: "(//div[@class='q-field__messages col']//div)[1]",
message: 'จำเป็นต้องกรอกข้อมูลนี้',
},
];
for (const error of expectedErrors) {
const locator = page.locator(error.locator);
await expect(locator).toHaveText(error.message);
}
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบทำการแจ้งเตือนให้เลือกกลุ่มหน่วยงาน');
await page.waitForSelector('id=btn-form-close');
await page.click('id=btn-form-close');
});
test('TC_2_0_006', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
// ส่วนข้อมูลพื้นฐาน
await page.click("(//input[@id='input-agencies-code'])[2]");
await page.waitForSelector('id=input-agencies-code_2');
await page.click('id=input-agencies-code_2');
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of the Republic of Bulgaria in Thailand',
);
// ส่วนข้อมูลที่อยู่
await page.fill(
"(//input[@id='-input-address-no'])[2]",
'100/45 อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24',
);
await page.fill("(//input[@id='-input-street'])[3]", 'สุขุมวิท 21 (อโศก)');
await page.click("(//input[@id='-select-province'])[2]");
await page.waitForSelector('id=-select-province_1');
await page.click('id=-select-province_1');
// การเลือก Dropdown ที่อยู่ข้างล่าง
await page.click("(//input[@id='-select-district'])[2]"); // คลิกเปิด dropdown
await page.waitForSelector('id=-select-district_2');
await page.click('id=-select-district_2');
await page.click("(//input[@id='-select-sub-district'])[2]");
await page.waitForSelector('id=-select-sub-district_1');
await page.click('id=-select-sub-district_1');
await page.fill(
"(//input[@id='-input-address-en'])[2]",
'100/45 Ocean Tower 2, 24th Floor',
);
await page.waitForTimeout(1000);
await page.click("(//button[@id='btn-info-basic-save'])[2]");
//ตรวจสอบข้อผิดพลาดที่ต้องแสดง
const expectedErrors = [
{
locator: "(//div[@class='q-field__messages col']//div)[1]",
message: 'จำเป็นต้องกรอกข้อมูลนี้',
},
];
for (const error of expectedErrors) {
const locator = page.locator(error.locator);
await expect(locator).toHaveText(error.message);
}
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบทำการแจ้งเตือนให้กรอกชื่อหน่วยงาน');
await page.waitForSelector('id=btn-form-close');
await page.click('id=btn-form-close');
});
test('TC_2_0_007', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
// ส่วนข้อมูลพื้นฐาน
await page.click("(//input[@id='input-agencies-code'])[2]");
await page.waitForSelector('id=input-agencies-code_2');
await page.click('id=input-agencies-code_2');
await page.fill(
"(//input[@id='input-agencies-name'])[2]",
'สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of the Republic of Bulgaria in Thailand',
);
await page.waitForTimeout(1000);
await page.click("(//button[@id='btn-info-basic-save'])[2]");
//ตรวจสอบข้อผิดพลาดที่ต้องแสดง
const expectedErrors = [
{
locator: "(//div[@class='q-field__messages col']//div)[1]",
message: 'จำเป็นต้องกรอกข้อมูลนี้',
},
{
locator: "(//div[@class='q-field__messages col']//div)[2]",
message: 'โปรดเลือกจังหวัด',
},
{
locator: "(//div[@class='q-field__messages col']//div)[3]",
message: 'โปรดเลือกเขต/อำเภอ',
},
{
locator: "(//div[@class='q-field__messages col']//div)[4]",
message: 'โปรดเลือกแขวง/ตำบล',
},
{
locator: "(//div[@class='q-field__messages col']//div)[5]",
message: 'จำเป็นต้องกรอกข้อมูลนี้',
},
];
for (const error of expectedErrors) {
const locator = page.locator(error.locator);
await expect(locator).toHaveText(error.message);
}
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบทำการแจ้งเตือนให้กรอกที่อยู่');
await page.waitForSelector('id=btn-form-close');
await page.click('id=btn-form-close');
});
test('TC_2_0_008', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-edit-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-edit-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
// ตรวจสอบหลังแก้ไข
const pageEditAgencies = page.locator('id=user-form-content');
await expect(pageEditAgencies).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงหน้าแก้ไขหน่วยงาน');
await page.click('id=btn-info-close');
});
test('TC_2_0_009', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-edit-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-edit-สถานเอกอัครราชทูตสาธารณรัฐบัลแกเรีย ประจำประเทศไทย',
);
// ส่วนข้อมูลพื้นฐาน
await page.fill(
'id=input-agencies-name',
'สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย',
);
await page.waitForTimeout(1000);
await page.click('id=btn-info-basic-save');
await page.waitForTimeout(1000);
await page.click('id=btn-info-close');
// ตรวจสอบหลังแก้ไข
const editAgencies = page.locator(
"//tr[contains(.,'สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย') and contains (.,'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงคลองเตยเหนือ, เขตวัฒนา, จังหวัดกรุงเทพมหานคร, 10110')]",
);
await expect(editAgencies).toContainText(
'สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย',
);
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบสามารถแก้ไขหน่วยงานได้');
});
test('TC_2_0_010', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-delete-สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-delete-สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย',
);
await page.waitForSelector('id=btn-ok-dialog');
await page.click('id=btn-ok-dialog');
// ตรวจสอบหลังลบ
const editAgencies = page.locator(
"//tr[contains(.,'สถานเอกอัครราชทูตสาธารณรัฐมอลต้า ประจำประเทศไทย') and contains (.,'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงคลองเตยเหนือ, เขตวัฒนา, จังหวัดกรุงเทพมหานคร, 10110')]",
);
await expect(editAgencies).toBeHidden();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบสามารถลบหน่วยงานในกรณีที่ยังไม่มีการใช้งานได้');
});
test('TC_2_0_011', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มหน่วยงาน
await page.waitForSelector('id=btn-add');
await page.click('id=btn-add');
// ส่วนข้อมูลพื้นฐาน
await page.click("(//input[@id='input-agencies-code'])[2]");
await page.waitForSelector('id=input-agencies-code_2');
await page.click('id=input-agencies-code_2');
await page.fill(
"(//input[@id='input-agencies-name'])[2]",
'สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.fill(
"(//input[@id='input-agencies-name-en'])[2]",
'Embassy of Japan in Thailand',
);
// ส่วนข้อมูลที่อยู่
await page.fill(
"(//input[@id='-input-address-no'])[2]",
'100/45 อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24',
);
await page.fill("(//input[@id='-input-street'])[3]", 'สุขุมวิท 21 (อโศก)');
await page.click("(//input[@id='-select-province'])[2]");
await page.waitForSelector('id=-select-province_1');
await page.click('id=-select-province_1');
// การเลือก Dropdown ที่อยู่ข้างล่าง
await page.click("(//input[@id='-select-district'])[2]"); // คลิกเปิด dropdown
await page.waitForSelector('id=-select-district_1');
await page.click('id=-select-district_1');
await page.click("(//input[@id='-select-sub-district'])[2]");
await page.waitForSelector('id=-select-sub-district_1');
await page.click('id=-select-sub-district_1');
await page.fill(
"(//input[@id='-input-address-en'])[2]",
'100/45 Ocean Tower 2, 24th Floor',
);
await page.waitForTimeout(1000);
await page.click("(//button[@id='btn-info-basic-save'])[2]");
// ปิดสถานะ
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
{ force: true },
);
await page.waitForSelector('id=btn-ok-dialog');
await page.click('id=btn-ok-dialog');
await page.waitForTimeout(2000);
// เปิดสถานะ
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
{ force: true },
);
await page.waitForSelector('id=btn-ok-dialog');
await page.click('id=btn-ok-dialog');
// การลบหน่วยงานที่ภูกใช้งานแล้ว
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.waitForSelector(
'id=btn-kebab-delete-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-delete-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.waitForSelector('id=btn-ok-dialog');
await page.click('id=btn-ok-dialog');
// ตรวจการแจ้งเตือนการลบหน่วยงานในกรณีที่หน่วยงานถูกใช้งานแล้ว
const popUpErrorAgenciesDeleted = page.locator(
"//span[normalize-space(text())='หน่วยงานใช้งานอยู่.']",
);
await expect(popUpErrorAgenciesDeleted).toHaveText('หน่วยงานใช้งานอยู่.');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบไม่สามารถลบหน่วยงานในกรณีที่มีการใช้งานได้');
await page.click('id=btn-ok-dialog');
});
test('TC_2_0_012', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
{
force: true,
},
);
await page.click('id=btn-ok-dialog');
console.log('เปลี่ยนสถานะสำเร็จ');
// รอ Update
await page.waitForTimeout(2000);
console.log('สถานะถูกเปลี่ยนแล้ว');
// ตรวจสอบสีของแถวหลังจากทำการเปลี่ยนสถานะ
const rowLocator = page.locator(
"//tr[contains(.,'สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย') and contains (.,'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงทรายกองดินใต้, เขตคลองสามวา, จังหวัดกรุงเทพมหานคร, 10510')]",
);
const backgroundColor = await rowLocator.evaluate(
(el) => window.getComputedStyle(el).backgroundColor,
);
// กำหนดสีหลัเปลี่ยนสถานะการใช้งาน
const expectedColor = 'rgba(0, 0, 0, 0)';
// ตรวจสอบสีที่เปลี่ยนไป
expect(backgroundColor.trim()).toBe(expectedColor);
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบทำการปิดสถานะการใช้งานหน่วยงาน');
});
test('TC_2_0_013', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
await page.click(
'id=btn-kebab-action-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
);
await page.click(
'id=btn-kebab-status-สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย',
{
force: true,
},
);
await page.click('id=btn-ok-dialog');
console.log('เปลี่ยนสถานะสำเร็จ');
// รอ Update
await page.waitForTimeout(2000);
console.log('สถานะถูกเปลี่ยนแล้ว');
// ตรวจสอบสีของแถวหลังจากทำการเปลี่ยนสถานะ
const rowLocator = page.locator(
"//tr[contains(.,'สถานเอกอัครราชทูตญี่ปุ่น ประจำประเทศไทย') and contains (.,'อาคารโอเชียน ทาวเวอร์ 2 ชั้น 24, ถนนสุขุมวิท 21 (อโศก), แขวงทรายกองดินใต้, เขตคลองสามวา, จังหวัดกรุงเทพมหานคร, 10510')]",
);
const backgroundColor = await rowLocator.evaluate(
(el) => window.getComputedStyle(el).backgroundColor,
);
// กำหนดสีหลัเปลี่ยนสถานะการใช้งาน
const expectedColor = 'rgb(249, 250, 252)';
// ตรวจสอบสีที่เปลี่ยนไป
expect(backgroundColor.trim()).toBe(expectedColor);
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบทำการเปิดสถานะการใช้งานหน่วยงาน');
});
test('TC_2_0_014', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่เมนูหน่วยงาน
const tableAgencies = page.locator("//tr[contains(.,'ลำดับชื่อที่อยู่')]");
await expect(tableAgencies).toBeVisible();
await page.waitForSelector("//div[@id='btn-mode']//button[1]");
await page.click("//div[@id='btn-mode']//button[1]");
const cardAgencies = page.locator(
"(//section[contains(@class,'column col-12')])[1]",
);
await expect(cardAgencies).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงข้อมูลตารางและการ์ดของหน่วยงานทั้งหมด');
});
test('TC_2_0_015', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่เมนูหน่วยงาน
const typeListAgencies = page.locator(
"//div[contains(@class,'q-table__container q-table--horizontal-separator')]",
);
await expect(typeListAgencies).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงเมนูหน่วยงานในรูปแบบ List');
});
test('TC_2_0_016', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// คลิก Dropdown ฟิลด์แสดงผล
await page.waitForSelector("(//div[@id='select-field'])[1]");
await page.click("(//div[@id='select-field'])[1]");
const dropdownFieldDisplay = page.locator('id=select-field_lb');
await expect(dropdownFieldDisplay).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงรายการฟิลด์แสดงผล');
});
test('TC_2_0_017', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// การแสดงหน่วยงานในรูปแบบการ์ด
await page.waitForSelector("//div[@id='btn-mode']//button[1]");
await page.click("//div[@id='btn-mode']//button[1]");
const typeCardAgencies = page.locator(
"//div[contains(@class,'q-table__grid-content row')]",
);
await expect(typeCardAgencies).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงเมนูหน่วยงานในรูปแบบ Card');
});
test('TC_2_0_018', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่เมนูหน่วยงาน
const pageAgencies = page.locator(
"//div[contains(@class,'stat-card__content row')]",
);
await expect(pageAgencies).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงจำนวนหน่วยงานทั้งหมด');
});

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,365 @@
import { test, expect, Page } from '@playwright/test';
import { de, fakerEN, fakerTH } from '@faker-js/faker';
import { isAwaitExpression } from 'typescript';
let page: Page;
let isLoginSuccessful = false;
test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
});
test.afterAll(async () => {
if (page !== undefined) {
await page.close();
}
});
async function login(page: Page) {
try {
// Login
await page.goto('/');
await expect(page).toHaveTitle(/^Sign in to /);
await page.fill("input[name='username']", 'admin');
await page.fill("input[name='password']", '1234');
await page.click('id=kc-login');
await page.waitForTimeout(2000);
// await page.click('id=acceptBtn');
// เข้าสู่หน้าแม่แบบขั้นตอนการทำงาน
await page.click('id=menu.sales');
await page.waitForSelector('id=sub-menu-quotation');
await page.click('id=sub-menu-quotation');
// ถ้าทั้งหมดสำเร็จ
isLoginSuccessful = true;
console.log('ระบบทำการ Login สำเร็จ');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการ Login');
isLoginSuccessful = false;
}
}
test('Login', async () => {
await login(page);
});
test('TC_3_0_001', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่เมนูใบเสนอราคา
const pageAgencies = page.locator(
"//span[contains(@class,'title-gradient text-weight-bold')]",
);
await expect(pageAgencies).toHaveText('ใบเสนอราคา');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดงหน้าเมนูใบเสนอราคา');
});
test('TC_3_0_002', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มใบเสนอราคา
await page.click('id=btn-add');
const pageQuatationTitle = page.locator(
"//div[contains(@class,'col text-subtitle1')]",
);
const dropdownServiceQuatation = page.locator('id=select-hq-id');
const dropdownSelectCustomer = page.locator('id=select-customer');
await expect(pageQuatationTitle).toHaveText('เพิ่มใบเสนอราคา');
await expect(dropdownServiceQuatation).toBeVisible();
await expect(dropdownSelectCustomer).toBeVisible();
await page.click('id=btn-form-cancel');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบแสดง Pop Up เพิ่มใบเสนอราคา');
});
test('TC_3_0_003', async () => {
// ถ้ายังไม่ได้ Login ให้ทำการ Login
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มใบเสนอราคา
await page.click('id=btn-add');
// เพิ่มใบเสนอราคาเพื่อเข้าสู่หน้าเพิ่มใบเสนอราคา
await page.waitForSelector('id=select-hq-id');
await page.click('id=select-hq-id');
await page.waitForSelector('id=select-hq-id_1');
await page.click('id=select-hq-id_1');
await page.waitForSelector('id=select-customer');
await page.click('id=select-customer');
await page.waitForSelector('id=select-customer_1');
await page.click('id=select-customer_1');
await page.waitForSelector('id=btn-form-submit');
await page.click('id=btn-form-submit');
await page.waitForTimeout(2000);
// ตรวจสอบหลังจากเข้าสู่หน้าเพิ่มใบเสนอราคา
const titlePageQuotation = page.locator(
"//header[contains(.,'ใบเสนอราคา')]",
);
await expect(titlePageQuotation).toBeVisible();
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log('ระบบเข้าสู่หน้าเพิ่มใบเสนอราคา');
});
test('TC_3_0_004', async () => {
if (!isLoginSuccessful) {
await login(page);
}
try {
// เข้าสู่หน้าเพิ่มใบเสนอราคา
await page.click('id=btn-add');
// เลือก HQ
await page.waitForSelector('id=select-hq-id');
await page.click('id=select-hq-id');
await page.waitForSelector('id=select-hq-id_1');
await page.click('id=select-hq-id_1');
// เลือกลูกค้า
await page.waitForSelector('id=select-customer');
await page.click('id=select-customer');
await page.waitForSelector('id=select-customer_1');
await page.click('id=select-customer_1');
// ตรวจสอบว่าหน้าเปลี่ยนใน tab เดิม หรือเปิดหน้าใหม่
const [newPage] = await Promise.all([
page
.context()
.waitForEvent('page')
.catch(() => null), // ตรวจจับหน้าใหม่
page.click('id=btn-form-submit'),
]);
// ใช้หน้าใหม่ถ้ามี หรือหน้าเดิมถ้าไม่มี
const newTab = newPage || page;
await newTab.waitForLoadState('networkidle');
// ตรวจสอบ URL เพื่อ debug
console.log(' URL ปัจจุบัน:', newTab.url());
// กรอกข้อมูลในฟอร์ม
await newTab.fill('id=input-work-name', 'MOU');
await newTab.fill('id=input-contact-name', fakerTH.person.fullName());
await newTab.fill('id=input-telephone', '0882273282');
// บันทึกใบเสนอราคา
await newTab.click('id=btn-save');
// ตรวจสอบว่าแสดงปุ่ม Edit
const showButtonEdit = newTab.locator('id=btn-edit');
await expect(showButtonEdit).toBeVisible();
// ปิดหน้าต่างใบเสนอราคา
await newTab.click('id=btn-close');
await newTab.waitForSelector('id=btn-ok-dialog');
await newTab.click('id=btn-ok-dialog');
} catch (error) {
console.error(' เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
await page.waitForTimeout(2000);
console.log(' ระบบบันทึกใบเสนอราคาและเห็นปุ่มแก้ไข');
});
test('TC_3_0_005', async ({ page, context }) => {
if (!isLoginSuccessful) {
await login(page);
}
try {
// เก็บจำนวนหน้าเดิมก่อนกด
const oldPages = context.pages();
// เข้าสู่หน้าเพิ่มใบเสนอราคา
await page.click('id=btn-add');
// เลือก HQ
await page.waitForSelector('id=select-hq-id');
await page.click('id=select-hq-id');
await page.waitForSelector('id=select-hq-id_1');
await page.click('id=select-hq-id_1');
// เลือกลูกค้า
await page.waitForSelector('id=select-customer');
await page.click('id=select-customer');
await page.waitForSelector('id=select-customer_1');
await page.click('id=select-customer_1');
// ตรวจสอบว่าหน้าเปลี่ยนใน tab เดิม หรือเปิดหน้าใหม่
await Promise.all([
page.click('id=btn-form-submit'),
context.waitForEvent('page').catch(() => null),
page.waitForLoadState('networkidle'),
]);
// ตรวจจับหน้าใหม่ถ้ามี
const newPages = context.pages().filter((p) => !oldPages.includes(p));
const newTab = newPages.length > 0 ? newPages[0] : page;
// ตรวจสอบ URL เพื่อ debug
console.log(' URL ปัจจุบัน:', newTab.url());
// ข้อมูลที่ต้องการทดสอบ
const initialContactName = fakerTH.person.fullName();
const updatedContactName = fakerTH.person.fullName();
// กรอกข้อมูลในฟอร์ม
await newTab.fill('id=input-work-name', 'MOU');
await newTab.fill('id=input-contact-name', initialContactName);
await newTab.fill('id=input-telephone', '0882273282');
// บันทึกใบเสนอราคา
await newTab.click('id=btn-save');
// ทดสอบการแก้ไขใบเสนอราคา
await newTab.click('id=btn-edit');
await newTab.fill('id=input-contact-name', updatedContactName);
await newTab.click('id=btn-save');
// ตรวจสอบว่าข้อมูลถูกแก้ไขสำเร็จ
const editedContactName = newTab.locator(
`//input[@value='${updatedContactName}']`,
);
await expect(editedContactName).toBeVisible();
// ปิดหน้าต่างใบเสนอราคา
await newTab.click('id=btn-close');
await newTab.waitForSelector('id=btn-ok-dialog');
await newTab.click('id=btn-ok-dialog');
} catch (error) {
console.error(' เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
console.log(' ระบบสามารถแก้ไขใบเสนอราคาได้');
await page.waitForTimeout(2000);
});
test('TC_3_0_006', async ({ page, context }) => {
if (!isLoginSuccessful) {
await login(page);
}
try {
// เก็บจำนวนหน้าเดิมก่อนกด
const oldPages = context.pages();
// // เข้าสู่หน้าเพิ่มใบเสนอราคา
// await page.click("(//button[@id='btn-eye-MOU'])[1]");
// ตรวจสอบว่าหน้าเปลี่ยนใน tab เดิม หรือเปิดหน้าใหม่
await Promise.all([
page.click("(//button[@id='btn-eye-MOU'])[1]"),
context.waitForEvent('page').catch(() => null),
page.waitForLoadState('networkidle'),
]);
// ตรวจจับหน้าใหม่ถ้ามี
const newPages = context.pages().filter((p) => !oldPages.includes(p));
const newTab = newPages.length > 0 ? newPages[0] : page;
// ตรวจสอบ URL เพื่อ debug
console.log(' URL ปัจจุบัน:', newTab.url());
// เปิดแท็ปลูกค้าตอบรับ
await newTab.click('id=btn-status-Accepted');
// ยืนยันลูกค้าตอบรับ
await newTab.waitForSelector('id=btn-submit-accepted');
await newTab.click('id=btn-submit-accepted');
await newTab.waitForSelector('id=btn-ok-dialog');
await newTab.click('id=btn-ok-dialog');
// ตรวจสอบว่าลูกค้าตอบรับแล้ว
const acceptedSubmit = newTab.locator('id=btn-submit-accepted');
await expect(acceptedSubmit).toBeHidden();
// ปิดหน้าต่างใบเสนอราคา
await newTab.click('id=btn-close');
await newTab.waitForSelector('id=btn-ok-dialog');
await newTab.click('id=btn-ok-dialog');
} catch (error) {
console.error(' เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
console.log(' ระบบทำการยืนยันลูกค้าตอบรับ');
await page.waitForTimeout(2000);
});
test('TC_3_0_007', async ({ page, context }) => {
if (!isLoginSuccessful) {
await login(page);
}
try {
// เก็บจำนวนหน้าเดิมก่อนกด
const oldPages = context.pages();
// // เข้าสู่หน้าเพิ่มใบเสนอราคา
await page.click("(//div[@role='tab'])[2]");
// ตรวจสอบว่าหน้าเปลี่ยนใน tab เดิม หรือเปิดหน้าใหม่
await Promise.all([
page.click('id=btn-eye-MOU'),
context.waitForEvent('page').catch(() => null),
page.waitForLoadState('networkidle'),
]);
// ตรวจจับหน้าใหม่ถ้ามี
const newPages = context.pages().filter((p) => !oldPages.includes(p));
const newTab = newPages.length > 0 ? newPages[0] : page;
// ตรวจสอบ URL เพื่อ debug
console.log(' URL ปัจจุบัน:', newTab.url());
// เปิดแท็ปใบแจ้งหนี้
await newTab.click('id=btn-status-Invoice');
// อนุมัติใบแจ้งหนี้
await newTab.waitForSelector('id=btn-approve-invoice');
await newTab.click('id=btn-approve-invoice');
// ตรวจสอบว่าอนุมัติใบแจ้งหนี้แล้ว
const acceptedSubmit = newTab.locator('id=btn-approve-invoice');
await expect(acceptedSubmit).toBeHidden();
// ปิดหน้าต่างใบเสนอราคา
await newTab.click('id=btn-close');
await newTab.waitForSelector('id=btn-ok-dialog');
await newTab.click('id=btn-ok-dialog');
} catch (error) {
console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
isLoginSuccessful = false;
throw error;
}
console.log('ระบบทำการอนุมัติใบแจ้งหนี้');
await page.waitForTimeout(2000);
});