365 lines
14 KiB
TypeScript
365 lines
14 KiB
TypeScript
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);
|
|
});
|