diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_001_CreateHeadquarters.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_001_CreateHeadquarters.spec.ts index b8195f4c..1b929f0b 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_001_CreateHeadquarters.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_001_CreateHeadquarters.spec.ts @@ -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'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002-1_CreateHeadquarterFailEn.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002-1_CreateHeadquarterFailEn.spec.ts index 840256d2..0e2f6f74 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002-1_CreateHeadquarterFailEn.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002-1_CreateHeadquarterFailEn.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002_CreateHeadquarterFail.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002_CreateHeadquarterFail.spec.ts index a4488f8f..1cbde9d5 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002_CreateHeadquarterFail.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_002_CreateHeadquarterFail.spec.ts @@ -17,7 +17,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_003_CreateSub-branch.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_003_CreateSub-branch.spec.ts index afdab906..251106d2 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_003_CreateSub-branch.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_003_CreateSub-branch.spec.ts @@ -13,7 +13,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004-1_CreateSub-branchFailEn.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004-1_CreateSub-branchFailEn.spec.ts index 79996499..d58339e7 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004-1_CreateSub-branchFailEn.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004-1_CreateSub-branchFailEn.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004_CreateSub-branchFail.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004_CreateSub-branchFail.spec.ts index 8546d794..28b6f0ff 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004_CreateSub-branchFail.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_004_CreateSub-branchFail.spec.ts @@ -13,7 +13,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_005_CreateServicePoint.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_005_CreateServicePoint.spec.ts index 89b8f383..48c77d58 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_005_CreateServicePoint.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_005_CreateServicePoint.spec.ts @@ -13,7 +13,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006-1_CreateServicePointFail.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006-1_CreateServicePointFail.spec.ts index 85cb5f38..1accbefe 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006-1_CreateServicePointFail.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006-1_CreateServicePointFail.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006_CreateServicePointFail.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006_CreateServicePointFail.spec.ts index 24166694..c68e30b7 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006_CreateServicePointFail.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_006_CreateServicePointFail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_007_SelectTypeBranch.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_007_SelectTypeBranch.spec.ts index 15f2499e..454ee036 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_007_SelectTypeBranch.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_007_SelectTypeBranch.spec.ts @@ -17,7 +17,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_008_ViewDetail.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_008_ViewDetail.spec.ts index e28548f7..23c9428d 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_008_ViewDetail.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_008_ViewDetail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_009_EditBranch.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_009_EditBranch.spec.ts index 1bcdbe42..65f844b9 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_009_EditBranch.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_009_EditBranch.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_010_StatusBranchandSubType.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_010_StatusBranchandSubType.spec.ts index 57db9034..826ef8ea 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_010_StatusBranchandSubType.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_010_StatusBranchandSubType.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_011_SearchBranchmanagement.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_011_SearchBranchmanagement.spec.ts index 75879a78..8ea4bb31 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_011_SearchBranchmanagement.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_011_SearchBranchmanagement.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_012_CloseStatusBranch.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_012_CloseStatusBranch.spec.ts index 750aeca8..1aecec32 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_012_CloseStatusBranch.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_012_CloseStatusBranch.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_013_DeleteBranch.spec.ts b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_013_DeleteBranch.spec.ts index e26cb5f5..d20de24c 100644 --- a/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_013_DeleteBranch.spec.ts +++ b/tests/01-Manage/01-Admin-BranchManagement/JWS_BM_013_DeleteBranch.spec.ts @@ -18,7 +18,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_001_CreatePersonnel.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_001_CreatePersonnel.spec.ts index fb0b4819..12c86cc3 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_001_CreatePersonnel.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_001_CreatePersonnel.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002-1_CreatePersonnelFailEn.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002-1_CreatePersonnelFailEn.spec.ts index a3cf071f..c844dd70 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002-1_CreatePersonnelFailEn.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002-1_CreatePersonnelFailEn.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002_CreatePersonnelFail.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002_CreatePersonnelFail.spec.ts index 46073b81..e4cc8530 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002_CreatePersonnelFail.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_002_CreatePersonnelFail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_003_ViewDetail.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_003_ViewDetail.spec.ts index ca19a36f..2617c343 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_003_ViewDetail.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_003_ViewDetail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_004_EditPersonnel.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_004_EditPersonnel.spec.ts index 7f3c01db..85b792c3 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_004_EditPersonnel.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_004_EditPersonnel.spec.ts @@ -17,7 +17,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_005_StatusPersonnel.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_005_StatusPersonnel.spec.ts index 71335ac7..70920f71 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_005_StatusPersonnel.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_005_StatusPersonnel.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_006_SearchPersonnel.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_006_SearchPersonnel.spec.ts index 7b10ae0f..58e61d5a 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_006_SearchPersonnel.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_006_SearchPersonnel.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { await page.close(); } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_007_StatusPersonnelType.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_007_StatusPersonnelType.spec.ts index 8249ae59..b3ff1baa 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_007_StatusPersonnelType.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_007_StatusPersonnelType.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_008_TypePersonnelFields.spec.ts b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_008_TypePersonnelFields.spec.ts index 46f8c3b6..6d4a7669 100644 --- a/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_008_TypePersonnelFields.spec.ts +++ b/tests/01-Manage/02-Admin-PersonnelManagement/JWS_PM_008_TypePersonnelFields.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/Createemployeeinlegal.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/Createemployeeinlegal.spec.ts index bea51866..9f41750e 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/Createemployeeinlegal.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/Createemployeeinlegal.spec.ts @@ -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'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_001_CreateNaturalperoson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_001_CreateNaturalperoson.spec.ts index 11647161..677db918 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_001_CreateNaturalperoson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_001_CreateNaturalperoson.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002-1_CreateNaturalperosonfailEn.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002-1_CreateNaturalperosonfailEn.spec.ts index 5a59eb15..bac50342 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002-1_CreateNaturalperosonfailEn.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002-1_CreateNaturalperosonfailEn.spec.ts @@ -18,7 +18,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002_CreateNaturalperosonfail.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002_CreateNaturalperosonfail.spec.ts index f8091850..74742620 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002_CreateNaturalperosonfail.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_002_CreateNaturalperosonfail.spec.ts @@ -19,7 +19,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_003_DetailNaturalperson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_003_DetailNaturalperson.spec.ts index a0171c00..ffadf150 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_003_DetailNaturalperson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_003_DetailNaturalperson.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_004_EditNaturalperson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_004_EditNaturalperson.spec.ts index f80c9359..4a23ef8d 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_004_EditNaturalperson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_004_EditNaturalperson.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_005_DeleteNaturalperson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_005_DeleteNaturalperson.spec.ts index c2680f0a..3d37c8bc 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_005_DeleteNaturalperson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_005_DeleteNaturalperson.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_006_StatusNaturalperson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_006_StatusNaturalperson.spec.ts index a28f5059..fef3b4b0 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_006_StatusNaturalperson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_006_StatusNaturalperson.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_007_CreateLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_007_CreateLegalentitly.spec.ts index a735bd69..b271b18d 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_007_CreateLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_007_CreateLegalentitly.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008-1_CreateLegalentitlyfailEn.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008-1_CreateLegalentitlyfailEn.spec.ts index 748844d8..9ea7c7a5 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008-1_CreateLegalentitlyfailEn.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008-1_CreateLegalentitlyfailEn.spec.ts @@ -18,7 +18,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008_CreateLegalentitlyfail.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008_CreateLegalentitlyfail.spec.ts index 910b2bc5..d05123e1 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008_CreateLegalentitlyfail.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_008_CreateLegalentitlyfail.spec.ts @@ -19,7 +19,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_009_DetailLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_009_DetailLegalentitly.spec.ts index 3bf3e2d7..2f528311 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_009_DetailLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_009_DetailLegalentitly.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_010_EditLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_010_EditLegalentitly.spec.ts index 580561c6..070cdcce 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_010_EditLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_010_EditLegalentitly.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_011_DeleteLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_011_DeleteLegalentitly.spec.ts index faf3eb9d..b191cc3c 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_011_DeleteLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_011_DeleteLegalentitly.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_012_StatusLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_012_StatusLegalentitly.spec.ts index baf8e6e5..0e1388e3 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_012_StatusLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_012_StatusLegalentitly.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_013_DropdownEmployertype.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_013_DropdownEmployertype.spec.ts index b03b3766..0472bef8 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_013_DropdownEmployertype.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_013_DropdownEmployertype.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_014_SearchManageCustomer.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_014_SearchManageCustomer.spec.ts index 462b1905..c8b506b1 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_014_SearchManageCustomer.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_014_SearchManageCustomer.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_015_ManageStatusCustomerType.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_015_ManageStatusCustomerType.spec.ts index 0edd1c84..f568a17d 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_015_ManageStatusCustomerType.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_015_ManageStatusCustomerType.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_016_CreateEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_016_CreateEmployee.spec.ts index 0d7580dd..daa2869e 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_016_CreateEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_016_CreateEmployee.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017-1_CreateEmployeeFailEn.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017-1_CreateEmployeeFailEn.spec.ts index 89a247dc..12dff95b 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017-1_CreateEmployeeFailEn.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017-1_CreateEmployeeFailEn.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017_CreateEmployeeFail.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017_CreateEmployeeFail.spec.ts index 3a908bde..9a2fe0ca 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017_CreateEmployeeFail.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_017_CreateEmployeeFail.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_018_SeachEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_018_SeachEmployee.spec.ts index b91051f6..5b2751a0 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_018_SeachEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_018_SeachEmployee.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_019_StatusEmployeeType.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_019_StatusEmployeeType.spec.ts index 95938c75..dbcad75e 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_019_StatusEmployeeType.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_019_StatusEmployeeType.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_020_DetailEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_020_DetailEmployee.spec.ts index e4891512..0ab9ca69 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_020_DetailEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_020_DetailEmployee.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_021_EditEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_021_EditEmployee.spec.ts index 6c20f59c..9f6b3112 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_021_EditEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_021_EditEmployee.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_022_DeleteEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_022_DeleteEmployee.spec.ts index 4af56b3e..e3684be5 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_022_DeleteEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_022_DeleteEmployee.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_023_StatusEmployee.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_023_StatusEmployee.spec.ts index 2bf6f2a2..54926235 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_023_StatusEmployee.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_023_StatusEmployee.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_024_DropdownEmployeetype.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_024_DropdownEmployeetype.spec.ts index cbc00729..6a3b387a 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_024_DropdownEmployeetype.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_024_DropdownEmployeetype.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_025_CreateInNaturalperson.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_025_CreateInNaturalperson.spec.ts index 18343593..f5f1b76c 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_025_CreateInNaturalperson.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_025_CreateInNaturalperson.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_026_CreateInNaturalpersonFail.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_026_CreateInNaturalpersonFail.spec.ts index 38338d12..4df9f87e 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_026_CreateInNaturalpersonFail.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_026_CreateInNaturalpersonFail.spec.ts @@ -18,7 +18,7 @@ test.afterAll(async () => { }); //สร้าง Function สำหรับ Login -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_027_CreateInLegalentitly.spec.ts b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_027_CreateInLegalentitly.spec.ts index e1b27b09..0a9381cf 100644 --- a/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_027_CreateInLegalentitly.spec.ts +++ b/tests/01-Manage/03-Admin-ManageCustomer/JWS_MC_027_CreateInLegalentitly.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_001_CreateProductandServiceGroup.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_001_CreateProductandServiceGroup.spec.ts index 3844bd60..2ac18848 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_001_CreateProductandServiceGroup.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_001_CreateProductandServiceGroup.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_002-1_CreateProductandServiceGroupFailEn.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_002-1_CreateProductandServiceGroupFailEn.spec.ts index 99c100e8..8e0a53c0 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_002-1_CreateProductandServiceGroupFailEn.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_002-1_CreateProductandServiceGroupFailEn.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_002_CreateProductandServiceGroupFail.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_002_CreateProductandServiceGroupFail.spec.ts index 7d209641..bed6bbb8 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_002_CreateProductandServiceGroupFail.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_002_CreateProductandServiceGroupFail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_003_CreateProductandService.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_003_CreateProductandService.spec.ts index db417c06..626ef222 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_003_CreateProductandService.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_003_CreateProductandService.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_004-1_CreateProductandServiceFailEn.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_004-1_CreateProductandServiceFailEn.spec.ts index d17415a4..3a9fe5bd 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_004-1_CreateProductandServiceFailEn.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_004-1_CreateProductandServiceFailEn.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_004_CreateProductandServiceFail.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_004_CreateProductandServiceFail.spec.ts index 98eb9890..5de6e9e9 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_004_CreateProductandServiceFail.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_004_CreateProductandServiceFail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_005_CreatePackage.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_005_CreatePackage.spec.ts index 1bb51102..10c65be4 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_005_CreatePackage.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_005_CreatePackage.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_006_CreatePackageFail.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_006_CreatePackageFail.spec.ts index 19121e5f..8572443e 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_006_CreatePackageFail.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_006_CreatePackageFail.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_007_DetailProductandService.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_007_DetailProductandService.spec.ts index 6bb2675d..1426c4eb 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_007_DetailProductandService.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_007_DetailProductandService.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_008_EditProductandService.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_008_EditProductandService.spec.ts index 3a6692e8..347b60da 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_008_EditProductandService.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_008_EditProductandService.spec.ts @@ -17,7 +17,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_009_StatusProductandServiceType.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_009_StatusProductandServiceType.spec.ts index 06f65d33..2bd70283 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_009_StatusProductandServiceType.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_009_StatusProductandServiceType.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_010_SelectTypeFields.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_010_SelectTypeFields.spec.ts index bde51b0c..23c509f7 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_010_SelectTypeFields.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_010_SelectTypeFields.spec.ts @@ -16,7 +16,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_011_StatusProductandService.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_011_StatusProductandService.spec.ts index 05d4c6e9..008cc48f 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_011_StatusProductandService.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_011_StatusProductandService.spec.ts @@ -14,7 +14,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/04-ProductandService/JWS_PD_013_DeleteProductandService.spec.ts b/tests/01-Manage/04-ProductandService/JWS_PD_013_DeleteProductandService.spec.ts index 84d2cde9..ac7301d3 100644 --- a/tests/01-Manage/04-ProductandService/JWS_PD_013_DeleteProductandService.spec.ts +++ b/tests/01-Manage/04-ProductandService/JWS_PD_013_DeleteProductandService.spec.ts @@ -15,7 +15,7 @@ test.afterAll(async () => { } }); -async function login(page) { +async function login(page: Page) { try { // Login await page.goto('/'); diff --git a/tests/01-Manage/MenuAgencies.spec.ts b/tests/01-Manage/MenuAgencies.spec.ts new file mode 100644 index 00000000..582d213f --- /dev/null +++ b/tests/01-Manage/MenuAgencies.spec.ts @@ -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('ระบบแสดงจำนวนหน่วยงานทั้งหมด'); +}); diff --git a/tests/01-Manage/MenuBranch.spec.ts b/tests/01-Manage/MenuBranch.spec.ts new file mode 100644 index 00000000..85a997a4 --- /dev/null +++ b/tests/01-Manage/MenuBranch.spec.ts @@ -0,0 +1,2120 @@ +import { test, expect, Page } from '@playwright/test'; + +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('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'); + + // ถ้าทั้งหมดสำเร็จ + isLoginSuccessful = true; + console.log('ระบบทำการ Login สำเร็จ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login'); + isLoginSuccessful = false; + } +} +test('Login', async () => { + await login(page); +}); + +test('TC_2_1_001', async () => { + // ถ้ายังไม่ได้ Login ให้ทำการ Login + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + const pageBranch = page.locator( + "//span[normalize-space(text())='จัดการสาขา']", + ); + await expect(pageBranch).toHaveText('จัดการสาขา'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); +}); + +test('TC_2_1_002', async () => { + // ถ้ายังไม่ได้ Login ให้ทำการ Login + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + const formInformation = page.locator('id=form-information'); + const formContact = page.locator('id=form-contact'); + const formAddress = page.locator('id=form-address'); + const formLocation = page.locator('id=form-location'); + const formQrCode = page.locator('id=form-qr'); + const formBank = page.locator('id=form-bank'); + const formManage = page.locator('id=form-branch-admin-view'); + const formAttachment = page.locator('id=form-attachment'); + const formRemark = page.locator('id=form-remark'); + + await expect(formInformation).toBeVisible(); + await expect(formContact).toBeVisible(); + await expect(formAddress).toBeVisible(); + await expect(formLocation).toBeVisible(); + await expect(formQrCode).toBeVisible(); + await expect(formBank).toBeVisible(); + await expect(formManage).toBeVisible(); + await expect(formAttachment).toBeVisible(); + await expect(formRemark).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); +}); + +test('TC_2_1_003', async () => { + // ถ้ายังไม่ได้ Login ให้ทำการ Login + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'JWS'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1082262426222'); + await page.fill( + "(//input[@id='input-name'])[2]", + 'บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.fill( + "(//input[@id='input-name-en'])[2]", + 'Jobs Worker Service co.,Ltd', + ); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill( + "(//input[@id='input-email'])[2]", + 'jwssubport@support.com', + ); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022202002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณเอ'); + await page.fill("(//input[@id='input-contact'])[2]", '0862242826'); + await page.fill("(//input[@id='input-line-id'])[2]", 'JWSChat'); + + // ส่วนที่อยู่ + await page.fill( + "(//input[@id='default-input-address-no'])[2]", + '53 ถนนสุขสวัสดิ์', + ); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click('id=default-select-province_1'); + await page.waitForTimeout(1000); + await page.click("(//label[@for='default-select-district'])[2]"); + // กำหนดตัวเลือกที่ต้องการ + const targetOptionId = 'id=default-select-district_36'; // id ของตัวเลือกที่ต้องการ + let isVisible = false; + const maxScrollAttempts = 10; // จำนวนครั้งสูงสุดในการเลื่อน + let attempt = 0; + + while (!isVisible && attempt < maxScrollAttempts) { + // ตรวจสอบว่า dropdown แสดงหรือไม่ + const dropdown = page.locator('#default-select-district_lb'); + if ((await dropdown.count()) === 0) { + console.error('ไม่พบ dropdown ที่ต้องการ'); + break; + } + + // ใช้ page.locator() เลื่อน dropdown ลงไป + await dropdown.evaluate((element) => { + element.scrollTop += 150; // เลื่อนลง 150px + }); + + // รอให้เลื่อนเสร็จ + await page.waitForTimeout(100); // รอ 0.1 วินาทีเพื่อให้การเลื่อนเสร็จสิ้น + + // ตรวจสอบว่าตัวเลือกแสดงอยู่ใน viewport หรือไม่ + isVisible = await page.locator(targetOptionId).isVisible(); + attempt++; + } + + // หากตัวเลือกที่ต้องการอยู่ใน viewport ให้คลิก + if (isVisible) { + const targetOption = page.locator(targetOptionId); + await targetOption.click(); + } else { + console.error('ไม่พบตัวเลือกที่ต้องการ'); + } + await page.waitForTimeout(1000); + await page.click("(//label[@for='default-select-sub-district'])[2]"); + await page.click('id=default-select-sub-district_1'); + await page.fill( + "(//input[@id='default-input-address-en'])[2]", + '53 Suk Sawat Rd', + ); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const newOfficeLocator = page.locator( + "//td[contains(.,'บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัดJWS00000')]", + ); + await newOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await newOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัดJWS00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); +}); + +test('TC_2_1_004', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + await page.click('id=btn-info-basic-save'); + + const exceptError = [ + { + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[6]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[7]", + message: 'โปรดเลือกจังหวัด', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[8]", + message: 'โปรดเลือกเขต/อำเภอ', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[9]", + message: 'โปรดเลือกแขวง/ตำบล', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[10]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + ]; + + for (const error of exceptError) { + const locator = page.locator(error.locator); + await expect(locator).toHaveText(error.message); + } + console.log('ระบบตรวจสอบการแจ้งเตือนแล้ว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + await page.click('id=btn-form-close'); + console.log('การตรวจสอบ Validation ถูกต้อง'); +}); + +test('TC_2_1_005', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + const exceptError = [ + { + 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 exceptError) { + const locator = page.locator(error.locator); + await expect(locator).toHaveText(error.message); + } + console.log('ระบบตรวจสอบการแจ้งเตือนแล้ว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + await page.click('id=btn-form-close'); + console.log('การตรวจสอบ Validation ถูกต้อง'); +}); + +test('TC_2_1_006', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'TES'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220282'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท คนอ จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'chano'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const newOfficeLocator = page.locator( + "//td[contains(.,'บริษัท คนอ จำกัดTES00000')]", + ); + await newOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await newOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัท คนอ จำกัดTES00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('สามารถสร้างสำนักงานใหญ่ได้'); +}); + +test('TC_2_1_007', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'CMM'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท คาโมมายด์ จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'CHAMOMIND'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + //ส ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '1202282262226'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + const exceptError = [ + { + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[6]", + message: 'โปรดเลือกจังหวัด', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[7]", + message: 'โปรดเลือกเขต/อำเภอ', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[8]", + message: 'โปรดเลือกแขวง/ตำบล', + }, + ]; + for (const error of exceptError) { + const locator = page.locator(error.locator); + await expect(locator).toHaveText(error.message); + } + console.log('ระบบตรวจสอบการแจ้งเตือนแล้ว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + await page.click('id=btn-form-close'); + console.log('การตรวจสอบ Validation ถูกต้อง'); +}); + +test('TC_2_1_008', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'NES'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท คนา จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'chana'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const newOfficeLocator = page.locator( + "//td[contains(.,'บริษัท คนา จำกัดNES00000')]", + ); + await newOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await newOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัท คนา จำกัดNES00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('สามารถสร้างสำนักงานใหญ่ได้'); +}); + +test('TC_2_1_009', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'EES'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท คชา จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'chaca'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const newOfficeLocator = page.locator( + "//td[contains(.,'บริษัท คชา จำกัดEES00000')]", + ); + await newOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await newOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัท คชา จำกัดEES00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('สามารถสร้างสำนักงานใหญ่ได้'); +}); + +test('TC_2_1_010', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'MES'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท นารา จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'nara'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/02'); + await page.fill("(//input[@aria-label='Moo'])[2]", '1'); + + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const newOfficeLocator = page.locator( + "//td[contains(.,'บริษัท นารา จำกัดMES00000')]", + ); + await newOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await newOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัท นารา จำกัดMES00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('สามารถสร้างสำนักงานใหญ่ได้'); +}); + +test('TC_2_1_011', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=btn-kebab-action-บริษัท คนอ จำกัด'); + await page.waitForSelector('id=btn-kebab-edit-บริษัท คนอ จำกัด'); + await page.click('id=btn-kebab-edit-บริษัท คนอ จำกัด'); + + const pageEditBranch = page.locator( + "//text[normalize-space(text())='แก้ไข']", + ); + + await expect(pageEditBranch).toHaveText('แก้ไข'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('ระบบแสดงหน้าแก้ไข'); +}); + +test('TC_2_1_012', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + 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-name', 'บริษัท ธนา จำกัด'); + await page.fill('id=input-name-en', 'Thana'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + const editOfficeLocator = page.locator( + "//td[contains(.,'บริษัท ธนา จำกัดTES00000')]", + ); + await editOfficeLocator.waitFor({ state: 'visible' }); + + // ดึงข้อความจาก ที่ตรงกับ XPath + const newOfficeName = await editOfficeLocator.textContent(); + + // ตรวจสอบว่าเนื้อหาที่บันทึกถูกต้อง + if (newOfficeName !== null) { + const trimmedName = newOfficeName.trim(); + expect(trimmedName).toBe('บริษัท ธนา จำกัดTES00000'); + console.log('การตรวจสอบสำเร็จ: ข้อมูลถูกต้อง'); + } else { + throw new Error('ไม่พบข้อมูลที่บันทึกใน '); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ:', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('ระบบแก้ไขสำนักงานใหญ่สำเร็จ'); +}); + +test('TC_2_1_013', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // ลบสำนักงานใหญ่ + 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 checkBranchDeleted = await page.locator( + "//tr[contains(.,'บริษัท คนา จำกัด') and contains (.,'81120')]", + ); + + await expect(checkBranchDeleted).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ:', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('ระบบไม่สามารถลบได้เนื่องจากสำนักงานใหญ่ถูกใช้งานแล้ว'); +}); + +test('TC_2_1_014', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // เปิดปิดสถานะทดสอบการลบสำนักงานใหญ่ที่ถูกใช้งานแล้ว + 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-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'); + + // ตรวจสอบการแจ้งเตือน Pop Up + const headPopUpError = await page.locator( + "//span[normalize-space(text())='แจ้งเตือน']", + ); + const popupErrorDeletedBranch = await page.locator( + "//span[normalize-space(text())='สาขาใช้งานอยู่']", + ); + + await expect(headPopUpError).toHaveText('แจ้งเตือน'); + await expect(popupErrorDeletedBranch).toHaveText('สาขาใช้งานอยู่'); + await page.click('id=btn-ok-dialog'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ:', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + console.log('ระบบไม่สามารถลบได้เนื่องจากสำนักงานใหญ่ถูกใช้งานแล้ว'); +}); + +// test('TC_2_1_015', async () => {}); + +// test('TC_2_1_016', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// }); + +test('TC_2_1_017', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'AOS'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1082262426222'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท แอสโอ จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Asso co.,Ltd'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill( + "(//input[@id='input-email'])[2]", + 'jwssubport@support.com', + ); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022202002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณเอ'); + await page.fill("(//input[@id='input-contact'])[2]", '0862242826'); + await page.fill("(//input[@id='input-line-id'])[2]", 'JWSChat'); + + // ส่วนที่อยู่ + await page.fill( + "(//input[@id='default-input-address-no'])[2]", + '53 ถนนสุขสวัสดิ์', + ); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click('id=default-select-province_1'); + await page.waitForTimeout(1000); + await page.click("(//label[@for='default-select-district'])[2]"); + // กำหนดตัวเลือกที่ต้องการ + const targetOptionId = 'id=default-select-district_36'; // id ของตัวเลือกที่ต้องการ + let isVisible = false; + const maxScrollAttempts = 10; // จำนวนครั้งสูงสุดในการเลื่อน + let attempt = 0; + + while (!isVisible && attempt < maxScrollAttempts) { + // ตรวจสอบว่า dropdown แสดงหรือไม่ + const dropdown = page.locator('#default-select-district_lb'); + if ((await dropdown.count()) === 0) { + console.error('ไม่พบ dropdown ที่ต้องการ'); + break; + } + + // ใช้ page.locator() เลื่อน dropdown ลงไป + await dropdown.evaluate((element) => { + element.scrollTop += 150; // เลื่อนลง 150px + }); + + // รอให้เลื่อนเสร็จ + await page.waitForTimeout(100); // รอ 0.1 วินาทีเพื่อให้การเลื่อนเสร็จสิ้น + + // ตรวจสอบว่าตัวเลือกแสดงอยู่ใน viewport หรือไม่ + isVisible = await page.locator(targetOptionId).isVisible(); + attempt++; + } + + // หากตัวเลือกที่ต้องการอยู่ใน viewport ให้คลิก + if (isVisible) { + const targetOption = page.locator(targetOptionId); + await targetOption.click(); + } else { + console.error('ไม่พบตัวเลือกที่ต้องการ'); + } + await page.waitForTimeout(1000); + await page.click("(//label[@for='default-select-sub-district'])[2]"); + await page.click('id=default-select-sub-district_1'); + await page.fill( + "(//input[@id='default-input-address-en'])[2]", + '53 Suk Sawat Rd', + ); + await page.fill("(//input[@aria-label='Moo'])[2]", '1'); + + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + + const checkAddressSave = await page.locator( + "//tr[contains(.,'บริษัท แอสโอ จำกัด') and contains (.,'10140')]", + ); + await expect(checkAddressSave).toContainText('53 ถนนสุขสวัสดิ์'); + await expect(checkAddressSave).toContainText('หมู่ 1'); + await expect(checkAddressSave).toContainText('แขวงราษฎร์บูรณะ'); + await expect(checkAddressSave).toContainText('เขตราษฎร์บูรณะ'); + await expect(checkAddressSave).toContainText('จังหวัดกรุงเทพมหานคร'); + await expect(checkAddressSave).toContainText('10140'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('สามารถบันทึกที่อยู่ได้'); +}); + +test('TC_2_1_018', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'CMM'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท คาโมมายด์ จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'CHAMOMIND'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + //ส ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '1202282262226'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + const exceptError = [ + { + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[6]", + message: 'โปรดเลือกจังหวัด', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[7]", + message: 'โปรดเลือกเขต/อำเภอ', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[8]", + message: 'โปรดเลือกแขวง/ตำบล', + }, + ]; + for (const error of exceptError) { + const locator = page.locator(error.locator); + await expect(locator).toHaveText(error.message); + } + console.log('ระบบตรวจสอบการแจ้งเตือนแล้ว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login', error); + isLoginSuccessful = false; + throw error; + } + + await page.waitForTimeout(4000); + await page.click('id=btn-form-close'); + console.log('ระบบทำการแจ้งเตือนให้กรอกที่อยู่ให้ครบ'); +}); + +test('TC_2_1_019', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + await page.click('id=hq-add-btn'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-abbreviation'])[2]", 'MOA'); + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220284'); + await page.fill("(//input[@id='input-name'])[2]", 'บริษัท โมอา จำกัด'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Moaa'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'cmm@support.com'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222262'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณต่อ'); + await page.fill("(//input[@id='input-contact'])[2]", '0866224228'); + await page.fill("(//input[@id='input-line-id'])[2]", 'local2024'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/02'); + await page.fill("(//input[@id='default-input-moo'])[3]", '1'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(1000); + await page.click("//div[@role='option']"); + 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'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + await page.click('id=btn-info-basic-save'); + + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('สามารถเพิ่มบัญชีธนาคารได้'); +}); + +test('TC_2_1_020', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ตรวจสอบหน้าการเพิ่มสาขา + const showSubbranchCrate = page.locator( + "//form[contains(.,'เพิ่ม สาขา JWS00000') and contains (.,'หมายเหตุหมายเหตุ')]", + ); + + await expect(showSubbranchCrate).toContainText('เพิ่ม สาขา JWS00000'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มสาขา'); +}); + +test('TC_2_1_021', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + for (let i = 0; i < 5; i++) { + try { + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill( + "(//input[@id='input-tax-no'])[2]", + `126084622028${i + 1}`, + ); + await page.fill("(//input[@id='input-name'])[2]", `สีลม${i + 1}`); + await page.fill("(//input[@id='input-name-en'])[2]", `Silom${i + 1}`); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนติดต่อ + await page.fill( + "(//input[@id='input-email'])[2]", + `host${i + 1}@local.co.th`, + ); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill( + "(//input[@id='input-contact'])[2]", + `08622864${i + 1}`, + ); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + await page.fill( + "(//input[@id='default-input-address-no'])[2]", + `20/0${i + 1}`, + ); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill( + "(//input[@id='default-input-address-en'])[2]", + `20/0${i + 1}`, + ); + + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click(`id=select-bankbook_${i + 1}`); + await page.fill( + "(//input[@aria-label='เลขบัญชี'])[2]", + `228202002${i + 1}`, + ); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill( + "(//input[@aria-label='ชื่อบัญชี'])[2]", + 'Pongpon Kuntana', + ); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error(`เกิดข้อผิดพลาดในรอบที่ ${i + 1}:`, error); + continue; + } + } + + // ตรวจสอบความถูกต้องหลังจากทำการบันทึกสร้างสำนักงานใหญ่ + // ตรวจสอบข้อมูลที่สร้างขึ้น + const branches = ['สีลม1', 'สีลม2', 'สีลม3', 'สีลม4', 'สีลม5']; + for (const branch of branches) { + const branchLocator = page.locator( + `//div[normalize-space(text())='${branch}']`, + ); + await branchLocator.waitFor({ state: 'visible' }); + const actualText = await branchLocator.textContent(); + expect(actualText?.trim()).toBe(branch); + } + + console.log('การตรวจสอบสำเร็จ : ข้อมูลถูกต้อง'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + console.log('ระบบทำการสร้างสาขาและเพิ่มรหัสาขาอัตโนมัติ'); +}); + +test('TC_2_1_022', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + await page.click('id=btn-info-basic-save'); + + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[6]", + message: 'โปรดเลือกจังหวัด', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[7]", + message: 'โปรดเลือกเขต/อำเภอ', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[8]", + message: 'โปรดเลือกแขวง/ตำบล', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[9]", + 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('ระบบทำการบังคับให้กรอกข้อมูลในช่องที่จำเป็นต้องกรอก'); +}); + +test('TC_2_1_023', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'host@local.co.th'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill("(//input[@id='input-contact'])[2]", '08622864'); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/0'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/0'); + + // ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '228202002'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + ]; + + 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('ระบบทำการแจ้งเตือนในช่องที่ถูกบังคับให้กรอก'); +}); + +test('TC_2_1_024', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-tax-no'])[2]", '126084622028'); + await page.fill("(//input[@id='input-name'])[2]", 'สามย่าน'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Silom'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1228222822822', + ); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/0'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/0'); + + // ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '228202002'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถทำการสร้างสาขาได้'); +}); + +test('TC_2_1_025', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220281'); + await page.fill("(//input[@id='input-name'])[2]", 'สามย่าน'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Silom'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1234423123425', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'host@local.co.th'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill("(//input[@id='input-contact'])[2]", '08622864'); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + // ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '228202002'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + + 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: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[6]", + message: 'โปรดเลือกจังหวัด', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[7]", + message: 'โปรดเลือกเขต/อำเภอ', + }, + { + locator: "(//div[@class='q-field__messages col']//div)[8]", + 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('ระบทำการแจ้งเตือนให้เพิ่มที่อยู่'); +}); + +test('TC_2_1_026', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220220'); + await page.fill("(//input[@id='input-name'])[2]", 'สยาม'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Silom'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1234423123425', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'host@local.co.th'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill("(//input[@id='input-contact'])[2]", '08622864'); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/0'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/0'); + + // ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '228202002'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('สามารถสร้างสาขาในกรณีที่ไม่เลือก Location ได้'); +}); + +test('TC_2_1_027', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220220'); + await page.fill("(//input[@id='input-name'])[2]", 'สยาม'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Silom'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1234423123425', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'host@local.co.th'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill("(//input[@id='input-contact'])[2]", '08622864'); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/0'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/0'); + + // ส่วนบัญชีธนาคาร + await page.click("(//input[@id='select-bankbook'])[3]"); + await page.click('id=select-bankbook_1'); + await page.fill("(//input[@aria-label='เลขบัญชี'])[2]", '228202002'); + await page.fill("(//input[@aria-label='สาขาธนาคาร'])[2]", 'เชียงใหม่'); + await page.fill("(//input[@aria-label='ชื่อบัญชี'])[2]", 'Pongpon Kuntana'); + await page.click("(//input[@aria-label='ประเภทบัญชี'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=select-bankbook_0'); + + await page.click('id=btn-info-basic-save'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('สามารถสร้างสาขาในกรณีที่ไม่อัปโหลด QR Code ได้'); +}); + +test('TC_2_1_028', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสร้างสาขา + await page.click( + 'id=create-sub-branch-btn-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.waitForSelector("(//button[@type='submit']//div)[1]"); + await page.click("(//button[@type='submit']//div)[1]"); + + // ส่วนข้อมูลพื้นฐาน + await page.fill("(//input[@id='input-tax-no'])[2]", '1260846220240'); + await page.fill("(//input[@id='input-name'])[2]", 'จตุจักร'); + await page.fill("(//input[@id='input-name-en'])[2]", 'Silom'); + await page.fill( + "(//input[@aria-label='เลขที่ใบอนุญาต'])[2]", + '1234423123425', + ); + + // ส่วนติดต่อ + await page.fill("(//input[@id='input-email'])[2]", 'host@local.co.th'); + await page.fill("(//input[@id='input-telephone-no'])[2]", '022222002'); + await page.fill("(//input[@id='input-contact-name'])[2]", 'คุณอาท'); + await page.fill("(//input[@id='input-contact'])[2]", '08622864'); + await page.fill("(//input[@id='input-line-id'])[2]", 'company'); + + // ส่วนที่อยู่ + await page.fill("(//input[@id='default-input-address-no'])[2]", '20/0'); + await page.click("(//input[@id='default-select-province'])[2]"); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.click("(//input[@id='default-select-sub-district'])[2]"); + await page.waitForTimeout(400); + await page.click("//div[@role='option']"); + await page.fill("(//input[@id='default-input-address-en'])[2]", '20/0'); + + await page.click('id=btn-info-basic-save'); + await page.click('id=btn-form-close'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('สามารถสร้างสาขาในกรณีที่ไม่เพิ่มบัญชีธนาคารได้'); +}); + +test('TC_2_1_029', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าแกไขสร้างสาขา + await page.waitForSelector( + 'id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.click('id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด'); + await page.waitForSelector('id=btn-kebab-action-สีลม1'); + await page.click('id=btn-kebab-action-สีลม1'); + await page.waitForSelector('id=btn-kebab-edit-สีลม1'); + await page.click('id=btn-kebab-edit-สีลม1'); + + const pageEditSubBranch = page.locator( + "//text[normalize-space(text())='แก้ไข']", + ); + + await expect(pageEditSubBranch).toHaveText('แก้ไข'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าแก้ไขสาขา'); +}); + +test('TC_2_1_030', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าแก้ไขสร้างสาขา + await page.waitForSelector( + 'id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.click('id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด'); + await page.waitForSelector('id=btn-kebab-action-สีลม1'); + await page.click('id=btn-kebab-action-สีลม1', { force: true }); + await page.waitForSelector('id=btn-kebab-edit-สีลม1'); + await page.click('id=btn-kebab-edit-สีลม1'); + + // ส่วนข้อมูลพื่นฐาน + await page.fill('id=input-name', 'เจริญนคร'); + await page.fill('id=input-name-en', 'charuengnakorn'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + //ตรวจสอบหลังจากแก้ไข + const editNameBranchShow = await page.locator( + "//div[normalize-space(text())='เจริญนคร']", + ); + + await expect(editNameBranchShow).toHaveText('เจริญนคร'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขสาขาได้'); +}); + +test('TC_2_1_031', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + // การเข้าหน้าสาขา + await page.waitForSelector( + 'id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', + ); + await page.click('id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด'); + + // ลบสาขา + // await page.waitForSelector('id=btn-kebab-action-สีลม5'); + await page.waitForTimeout(2000); + await page.click('id=btn-kebab-action-สีลม5', { timeout: 2000 }); + await page.waitForSelector('id=btn-kebab-delete-สีลม5'); + await page.click('id=btn-kebab-delete-สีลม5'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + //ตรวจสอบหลังจากทำการลบ + const checkBranchDeleted = await page.locator( + "//div[normalize-space(text())='สีลม5']", + ); + + await expect(checkBranchDeleted).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถทำการลบสาขาได้'); +}); + +// test('TC_2_1_032', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // เข้าสู่เมนูสาขา +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-branch'); +// await page.click('id=sub-menu-branch'); + +// // การเข้าหน้าแก้ไขสร้างสาขา +// await page.waitForSelector( +// 'id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', +// ); +// await page.click('id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด'); + +// // ปิดสถานะ +// await page.waitForSelector('id=btn-kebab-action-สีลม3'); +// await page.click('id=btn-kebab-action-สีลม3'); +// await page.waitForSelector('id=btn-kebab-status-สีลม3'); +// await page.click('id=btn-kebab-status-สีลม3', { force: true }); +// await page.waitForSelector('id=btn-ok-dialog'); +// await page.click('id=btn-ok-dialog'); + +// // เปิดสถานะ +// await page.waitForSelector('id=btn-kebab-action-สีลม3'); +// await page.click('id=btn-kebab-action-สีลม3'); +// await page.waitForTimeout(2000); +// await page.click('id=btn-kebab-status-สีลม3'); +// await page.waitForSelector('id=btn-ok-dialog'); +// await page.click('id=btn-ok-dialog'); + +// // ลบสาขา +// await page.waitForSelector('id=btn-kebab-action-สีลม3'); +// await page.click('id=btn-kebab-action-สีลม3', { force: true }); +// await page.waitForSelector('id=btn-kebab-delete-สีลม3'); +// await page.click('idbtn-kebab-delete-สีลม3'); +// await page.waitForSelector('id=btn-ok-dialog'); +// await page.click('id=btn-ok-dialog'); + +// //ตรวจสอบหลังจากแก้ไข +// const headPopUpError = await page.locator( +// "//span[normalize-space(text())='แจ้งเตือน']", +// ); +// const detailPopupError = await page.locator( +// "//span[normalize-space(text())='สาขาใช้งานอยู่']", +// ); + +// await expect(headPopUpError).toHaveText('แจ้งเตือน'); +// await expect(detailPopupError).toHaveText('สาขาใช้งานอยู่'); +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบไม่สามารถทำการลบสาขาได้เนื่องจากสาขาถูกใช้งานไปแล้ว'); +// }); + +test('TC_2_1_033', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูสาขา + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-branch'); + await page.click('id=sub-menu-branch'); + + const showAmountBranch = page.locator( + "(//div[contains(@class,'stat-card__content row')])[1]", + ); + const showAmountSubBranch = page.locator( + "(//div[contains(@class,'stat-card__content row')])[2]", + ); + const showAmountServicepoint = page.locator( + "(//div[contains(@class,'stat-card__content row')])[3]", + ); + + // รอ Locator แสดง + await showAmountBranch.waitFor({ state: 'visible' }); + await showAmountSubBranch.waitFor({ state: 'visible' }); + await showAmountServicepoint.waitFor({ state: 'visible' }); + + // ดึงค่าข้อความ + const branchText = await showAmountBranch.textContent(); + const subBranchText = await showAmountSubBranch.textContent(); + const servicePointText = await showAmountServicepoint.textContent(); + + console.log(`สำนักงานใหญ่ : ${branchText?.trim()}`); + console.log(`สาขา : ${subBranchText?.trim()}`); + console.log(`จุดรับบริการ : ${servicePointText?.trim()}`); + + // ตรวจสอบว่าค่าแสดงตัวเลขหรือไม่ + expect(branchText).toMatch(/\d+/); + expect(subBranchText).toMatch(/\d+/); + expect(servicePointText).toMatch(/\d+/); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงจำนวนสำนักงานใหญ่,สาขา,จุดรับบริการ'); +}); + +// test('TC_2_1_034', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // เข้าสู่เมนูสาขา +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-branch'); +// await page.click('id=sub-menu-branch'); + +// // การเข้าหน้าสาขา +// await page.waitForSelector( +// 'id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด', +// ); +// await page.click('id=tree-enter-บริษัทจ็อบเวิร์คเกอร์ เซอร์วิส จำกัด'); + +// const showAmountBranch = page.locator( +// "(//div[contains(@class,'stat-card__content row')])[1]", +// ); +// const showAmountSubBranch = page.locator( +// "(//div[contains(@class,'stat-card__content row')])[2]", +// ); +// const showAmountServicepoint = page.locator( +// "(//div[contains(@class,'stat-card__content row')])[3]", +// ); + +// // รอ Locator แสดง +// await showAmountBranch.waitFor({ state: 'visible' }); +// await showAmountSubBranch.waitFor({ state: 'visible' }); +// await showAmountServicepoint.waitFor({ state: 'visible' }); + +// // ดึงค่าข้อความ +// const branchText = await showAmountBranch.textContent(); +// const subBranchText = await showAmountSubBranch.textContent(); +// const servicePointText = await showAmountServicepoint.textContent(); + +// console.log(`สำนักงานใหญ่ : ${branchText?.trim()}`); +// console.log(`สาขา : ${subBranchText?.trim()}`); +// console.log(`จุดรับบริการ : ${servicePointText?.trim()}`); + +// // ตรวจสอบว่าค่าแสดงตัวเลขหรือไม่ +// expect(branchText).toMatch(/\d+/); +// expect(subBranchText).toMatch(/\d+/); +// expect(servicePointText).toMatch(/\d+/); +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบแสดงจำนวนสำนักงานใหญ่,สาขา,จุดรับบริการ'); +// }); diff --git a/tests/01-Manage/MenuCustomer.spec.ts b/tests/01-Manage/MenuCustomer.spec.ts new file mode 100644 index 00000000..74b4448c --- /dev/null +++ b/tests/01-Manage/MenuCustomer.spec.ts @@ -0,0 +1,2332 @@ +import { test, expect, Page } from '@playwright/test'; +import { fakerEN, fakerTH } from '@faker-js/faker'; + +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'); + + // ถ้าทั้งหมดสำเร็จ + isLoginSuccessful = true; + console.log('ระบบทำการ Login สำเร็จ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login'); + isLoginSuccessful = false; + } +} +test('Login', async () => { + await login(page); +}); + +test('TC_2_4_001', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าจัดการลูกค้า'); +}); + +test('TC_2_4_002', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเพิ่มนายจ้าง + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + const showAddNaturalPerson = page.locator('id=add-customer-natural-person'); + const showAddLegalEntry = page.locator('id=add-customer-legal-entity'); + + await expect(showAddNaturalPerson).toBeVisible(); + await expect(showAddLegalEntry).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log( + 'ระบบแสดงเมนูย่อยเพื่อเพิ่มนายจ้างโดยจะแสดงเพิ่มบุคคธรรมดา,เพิ่มนิติบุคคล', + ); +}); + +test('TC_2_4_003', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเพิ่มนายจ้างนิติบุคคล + await page.waitForTimeout(2000); + await page.click('id=btn-add'); + + await page.waitForSelector('id=add-customer-legal-entity'); + await page.click('id=add-customer-legal-entity'); + + await page.waitForSelector('.dialog-header-container', { + state: 'visible', + }); + await expect(page.locator('.dialog-header-container')).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มนายจ้างนิติบุคคล'); +}); + +test('TC_2_4_004', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเพิ่มนายจ้างนิติบุคคล + await page.waitForTimeout(2000); + await page.click('id=btn-add'); + + await page.waitForSelector('id=add-customer-legal-entity'); + await page.click('id=add-customer-legal-entity'); + + // ส่วนเกี่ยวกับ + await page.fill( + 'id=input-register-name', + 'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด ', + ); + await page.fill('id=input-register-name-en', 'AsiaTech Systems Co., Ltd.'); + await page.fill('id=input-legal-person-no', 'อนุชา ศรีสวัสดิ์'); + await page.fill('id=input-legal-person-code', '2022822642228'); + + // จดทะเบียนเมื่อ + await page.click("(//input[@id='form-input-register-date'])[1]"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2020']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ก.ย.']"); + await page.click("//div[@id='2020-09-18']/div[1]"); + + await page.fill('id=input-authorized-capital', '10000000'); + await page.fill('id=input-telephone-no', '022202002'); + + // ส่วนข้อมูลธุรกิจ + await page.click("(//div[@class='q-tab__label'])[2]"); + await page.click('id=form-select-business-type'); + await page.waitForSelector('id=form-select-business-type_3'); + await page.click('id=form-select-business-type_3'); + await page.click('id=form-select-job-position'); + await page.waitForSelector('id=form-select-job-position_0'); + await page.click('id=form-select-job-position_0'); + await page.fill('id=form-input-job-description', 'รายละเอียดงาน'); + await page.fill( + "(//input[@id='form-input-pay-rate'])[1]", + 'วันจ่ายเงินเดือน', + ); + await page.fill("(//input[@id='form-input-pay-rate'])[2]", 'Pay day'); + await page.fill("(//input[@id='form-input-pay-rate'])[3]", '2000'); + + // ส่วนผู้มีอำนาจลงนาม + await page.click("(//div[@class='q-tab__label'])[3]"); + await page.fill( + "(//input[@id='form-input-contact-name'])[1]", + 'อนุชา ศรีสวัสดิ์', + ); + await page.fill( + "(//input[@id='form-input-contact-name'])[2]", + 'Anucha Srisawat', + ); + + // ส่วนที่อยู่นายจ้าง + await page.click("(//div[@class='q-tab__label'])[4]"); + await page.fill("(//input[@id='form-input-address'])[1]", '20228226242'); + await page.fill( + 'id=form-input-address-no', + '1234 อาคารซิตี้ทาวเวอร์ ชั้น 12', + ); + await page.fill("(//input[@id='form-input-street'])[1]", 'สาทรใต้'); + await page.click('id=form-select-province'); + await page.waitForSelector('id=form-select-province_1'); + await page.click('id=form-select-province_1'); + await page.click('id=form-select-district'); + await page.waitForSelector('id=form-select-district_11'); + await page.click('id=form-select-district_11'); + await page.click('id=form-select-sub-district'); + await page.waitForSelector('id=form-select-sub-district_1'); + await page.click('id=form-select-sub-district_1'); + await page.fill( + 'id=form-input-address-en', + '1234 City Tower Building, 12th Floor', + ); + await page.fill("(//input[@id='form-input-street'])[2]", 'South Sathorn'); + + // ส่วนข้อมูลผู้ติดต่อ + await page.click("(//div[@class='q-tab__label'])[5]"); + await page.fill('id=form-input-contact-name', 'วราภรณ์ ศรีสวัสดิ์'); + await page.fill('id=form-input-mail', 'asiatech@support.com'); + await page.fill("(//input[@id='form-input-telephone'])[1]", '0866522622'); + await page.fill("(//input[@id='form-input-telephone'])[2]", '022022002'); + await page.click('id=quotation-branch'); + await page.waitForSelector('id=quotation-branch_1'); + await page.click('id=quotation-branch_1'); + await page.waitForSelector("//button[@type='submit']"); + await page.click("//button[@type='submit']"); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + const legalEntitlyNameCheck = await page.locator( + "//tr[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด') and contains (.,'022022002')]", + ); + + await expect(legalEntitlyNameCheck).toContainText( + 'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด', + ); + await expect(legalEntitlyNameCheck).toContainText('022022002'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างนายจ้างนิติบุคคล'); +}); + +test('TC_2_4_005', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเพิ่มนายจ้างนิติบุคคล + await page.waitForTimeout(2000); + await page.click('id=btn-add'); + + await page.waitForSelector('id=add-customer-natural-person'); + await page.click('id=add-customer-natural-person'); + + await page.waitForSelector('.dialog-header-container', { + state: 'visible', + }); + await expect(page.locator('.dialog-header-container')).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มนายจ้างบุคคลธรรมดา'); +}); + +test('TC_2_4_006', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเพิ่มนายจ้างนิติบุคคล + await page.waitForTimeout(2000); + await page.click('id=btn-add'); + + await page.waitForSelector('id=add-customer-natural-person'); + await page.click('id=add-customer-natural-person'); + + // ส่วนเกี่ยวกับ + await page.fill('id=input-card-number', '1524428220420'); + await page.waitForSelector('id=form-select-prefix-name'); + await page.click('id=form-select-prefix-name'); + await page.waitForSelector('id=form-select-prefix-name_0'); + await page.click('id=form-select-prefix-name_0'); + await page.fill('id=form-input-first-name', 'ยศพัฒน์'); + await page.fill('id=form-input-last-name', 'ธนากานต์'); + await page.fill('id=form-input-first-name-en', 'Yossapat'); + await page.fill('id=form-input-last-name-en', 'Tanakarn'); + await page.fill('id=form-input-telephone', '0842262228'); + await page.waitForSelector('id=form-input-birth-date'); + await page.click('id=form-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1999']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ต.ค.']"); + await page.click("//div[@id='1999-10-02']/div[1]"); + + // ส่วนข้อมูลธุรกิจ + await page.waitForSelector("(//div[@aria-selected='false'])[2]"); + await page.click("(//div[@aria-selected='false'])[2]"); + await page.waitForSelector('id=form-select-business-type'); + await page.click('id=form-select-business-type'); + await page.click('id=form-select-business-type_6'); + await page.waitForSelector('id=form-select-job-position'); + await page.click('id=form-select-job-position'); + await page.click('id=form-select-job-position_0'); + + // ส่วนที่อยู่นายจ้าง + await page.click("(//div[@aria-selected='false'])[3]"); + await page.fill("(//input[@id='form-input-address'])[1]", '22282205202'); + await page.fill('id=form-input-address-no', '200'); + await page.click('id=form-select-province'); + await page.waitForSelector('id=form-select-province_4'); + await page.click('id=form-select-province_4'); + await page.click('id=form-select-district'); + await page.waitForSelector('id=form-select-district_8'); + await page.click('id=form-select-district_8'); + await page.click('id=form-select-sub-district'); + await page.waitForSelector('id=form-select-sub-district_7'); + await page.click('id=form-select-sub-district_7'); + await page.fill('id=form-input-address-en', '200'); + await page.click("//button[@type='submit']"); + await page.click('id=btn-form-close'); + + // กำหนดค่าเพื่อตรวจสอบความถูกต้องหลังสร้าง + + const nameTitleNatrualPerson = await page.locator( + "//tr[contains(.,'นาย ยศพัฒน์ ธนากานต์') and contains (.,'--')]", + ); + + expect(nameTitleNatrualPerson).toContainText('ยศพัฒน์ ธนากานต์'); + expect(nameTitleNatrualPerson).toContainText('--'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถสร้างนายจ้างบุคคลธรรมดาได้'); +}); + +test('TC_2_4_007', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // ตรวจสอบการเข้าไปในนายจ้างนิติบุคคล + try { + await page.waitForSelector( + "//td[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัดAsiaTech Systems Co., Ltd.')]", + ); + await page.click( + "//td[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัดAsiaTech Systems Co., Ltd.')]", + ); + + const detailInLegalPerson = page.locator( + "//tr[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด') and contains (.,'0')]", + ); + + await expect(detailInLegalPerson).toContainText( + 'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด', + ); + await expect(detailInLegalPerson).toContainText( + '1234 อาคารซิตี้ทาวเวอร์ ชั้น 12, ถนนสาทรใต้, แขวงบางมด, เขตทุ่งครุ, จังหวัดกรุงเทพมหานคร, 10140', + ); + await expect(detailInLegalPerson).toContainText('022202002'); + await expect(detailInLegalPerson).toContainText('กิจการก่อสร้าง'); + await expect(detailInLegalPerson).toContainText('0'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการแสดงนายจ้างนิติบุคค]', error); + throw error; + } + + // กลับไปสู่หน้าจัดการลูกค้า + await page.waitForSelector( + "//span[normalize-space(text())='จัดการลูกค้าภายในองค์กร']", + ); + await page.click( + "//span[normalize-space(text())='จัดการลูกค้าภายในองค์กร']", + ); + + // ตรวจสอบการเข้าไปในนายจ้างบุคคลธรรมดา + try { + await page.waitForSelector( + "//td[contains(.,'นาย ยศพัฒน์ ธนากานต์Mr Yossapat Tanakarn')]", + ); + await page.click( + "//td[contains(.,'นาย ยศพัฒน์ ธนากานต์Mr Yossapat Tanakarn')]", + ); + + const detailInNaturalPerson = page.locator( + "//tr[contains(.,'ยศพัฒน์ ธนากานต์') and contains (.,'0')]", + ); + + await expect(detailInNaturalPerson).toContainText('ยศพัฒน์ ธนากานต์'); + await expect(detailInNaturalPerson).toContainText( + '200, ตำบลนิคมทุ่งโพธิ์ทะเล, อำเภอเมืองกำแพงเพชร, จังหวัดกำแพงเพชร, 62000', + ); + await expect(detailInNaturalPerson).toContainText('0842262228 '); + await expect(detailInNaturalPerson).toContainText( + 'ต่อเนื่องปศุสัตว์โรงฆ่าสัตว์ ชำแหละ ', + ); + await expect(detailInNaturalPerson).toContainText('0'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการแสดงนายจ้างบุคคลธรรมดา', error); + throw error; + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงข้อมูลภายในของนายจ้างนิติบุคคลและนายจ้างบุคคลธรรมดา'); +}); + +test('TC_2_4_008', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // ตรวจสอบการเข้าไปในนายจ้างนิติบุคคล + try { + await page.waitForSelector( + "//td[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัดAsiaTech Systems Co., Ltd.')]", + ); + await page.click( + "//td[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัดAsiaTech Systems Co., Ltd.')]", + ); + await page.waitForSelector( + 'id=btn-show-employee-บริษัท เอเชียเทค ซิสเต็มส์ จำกัด', + ); + await page.click('id=btn-show-employee-บริษัท เอเชียเทค ซิสเต็มส์ จำกัด'); + + // เพิ่มลูกจ้างในนายจ้างนิติบุุคตล + await page.waitForSelector( + 'id=บริษัท เอเชียเทค ซิสเต็มส์ จำกัด-btn-add-employee', + ); + await page.click('id=บริษัท เอเชียเทค ซิสเต็มส์ จำกัด-btn-add-employee'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill('id=form-employee-input-nrc-no', '2202292283202'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + fakerTH.person.firstName('male'), + ); + await page.fill( + 'id=form-employee-input-last-name', + fakerTH.person.lastName(), + ); + await page.fill( + 'id=form-employee-input-first-name-en', + fakerEN.person.firstName(), + ); + await page.fill( + 'id=form-employee-input-last-name-en', + fakerEN.person.lastName(), + ); + + // วันเดือนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.waitForSelector("//div[text()='2000']"); + await page.click("//div[text()='2000']"); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.waitForSelector("//div[text()='ก.พ.']"); + await page.click("//div[text()='ก.พ.']"); + await page.waitForSelector("//div[@id='2000-02-04']/div[1]"); + await page.click("//div[@id='2000-02-04']/div[1]"); + + // เลือกเพศและสัญชาติ + await page.click('id=form-employee-select-gender'); + await page.click('id=form-employee-select-gender_0'); + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.click('id=btn-form-close'); + + const employeeAddCompeleted = page.locator( + `(//tr[@id='row-table-${fakerEN.person.firstName()}'])[1]`, + ); + + await expect(employeeAddCompeleted).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการแสดงนายจ้างนิติบุคค]', error); + throw error; + } + + // กลับไปสู่หน้าจัดการลูกค้า + await page.waitForSelector( + "//span[normalize-space(text())='จัดการลูกค้าภายในองค์กร']", + ); + await page.click( + "//span[normalize-space(text())='จัดการลูกค้าภายในองค์กร']", + ); + + // ตรวจสอบการเข้าไปในนายจ้างบุคคลธรรมดา + try { + await page.waitForSelector( + "//td[contains(.,'นาย ยศพัฒน์ ธนากานต์Mr Yossapat Tanakarn')]", + ); + await page.click( + "//td[contains(.,'นาย ยศพัฒน์ ธนากานต์Mr Yossapat Tanakarn')]", + ); + await page.waitForSelector('id=btn-show-employee-ยศพัฒน์ ธนากานต์'); + await page.click('id=btn-show-employee-ยศพัฒน์ ธนากานต์'); + + // เพิ่มลูกจ้างในนายจ้างนิติบุุคตล + await page.waitForSelector('id=ยศพัฒน์-btn-add-employee'); + await page.click('id=ยศพัฒน์-btn-add-employee'); + + // ส่วนข้อมูลพื้นฐาน + await page.fill('id=form-employee-input-nrc-no', '2202292283202'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + fakerTH.person.firstName('male'), + ); + await page.fill( + 'id=form-employee-input-last-name', + fakerTH.person.lastName(), + ); + await page.fill( + 'id=form-employee-input-first-name-en', + fakerEN.person.firstName(), + ); + await page.fill( + 'id=form-employee-input-last-name-en', + fakerEN.person.lastName(), + ); + + // วันเดือนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.waitForSelector("//div[text()='2000']"); + await page.click("//div[text()='2000']"); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.waitForSelector("//div[text()='ก.พ.']"); + await page.click("//div[text()='ก.พ.']"); + await page.waitForSelector("//div[@id='2000-02-04']/div[1]"); + await page.click("//div[@id='2000-02-04']/div[1]"); + + // เลือกเพศและสัญชาติ + await page.click('id=form-employee-select-gender'); + await page.click('id=form-employee-select-gender_0'); + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + await page.waitForSelector("(//button[@id='btn-info-basic-save'])[2]"); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + await page.waitForTimeout(2000); + await page.click('id=btn-form-close'); + + const employeeAddCompeleted = page.locator( + `(//tr[@id='row-table-${fakerEN.person.firstName()}'])[1]`, + ); + + await expect(employeeAddCompeleted).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการแสดงนายจ้างบุคคลธรรมดา', error); + throw error; + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log( + 'ระบบสามารถเพิ่มลูกจ้างในนายจ้างนิติบุคคลและนายจ้างบุคคลธรรมดาได้', + ); +}); + +test('TC_2_4_009', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // --------------------------------------สถานะนายจ้างนิติบุคคล------------------------------------------- + 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 (.,'022022002')]", + ); + const backgroundColor = await rowLocator.evaluate( + (el) => window.getComputedStyle(el).backgroundColor, + ); + + // กำหนดสีหลัเปลี่ยนสถานะการใช้งาน + const expectedColor = 'rgb(249, 250, 252)'; + + // ตรวจสอบสีที่เปลี่ยนไป + expect(backgroundColor.trim()).toBe(expectedColor); + console.log('สีของแถวถูกเปลี่ยน Inactive'); + + // -----------------------------------------เปิดสถานะนายจ้างนิติบุคคล-------------------------------------------------- + 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 rowActiveOpenLocator = page.locator( + "//tr[contains(.,'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด') and contains (.,'022022002')]", + ); + const backgroundActiveOpenColor = await rowActiveOpenLocator.evaluate( + (el) => window.getComputedStyle(el).backgroundColor, + ); + + // กำหนดสีหลัเปลี่ยนสถานะการใช้งาน + const expectedActiveOpenColor = 'rgb(249, 250, 252)'; + + // ตรวจสอบสีที่เปลี่ยนไป + expect(backgroundActiveOpenColor.trim()).toBe(expectedActiveOpenColor); + console.log('สีของแถวถูกเปลี่ยนเป็น Active'); + } catch (error) { + console.error('ไม่สามารถเปลี่ยนสถานะได้'); + } + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงข้อมูลภายในของนายจ้างนิติบุคคลและนายจ้างบุคคลธรรมดา'); +}); + +test('TC_2_4_010', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเข้าหน้าแก้ไขนายจ้างนิติบุคคล + await page.click('id=btn-kebab-action-อนุชา ศรีสวัสดิ์'); + await page.waitForSelector('id=btn-kebab-edit-อนุชา ศรีสวัสดิ์'); + await page.click('id=btn-kebab-edit-อนุชา ศรีสวัสดิ์'); + + const pageHeadEditLegalPerson = page.locator( + "//span[text()='บริษัท เอเชียเทค ซิสเต็มส์ จำกัด']", + ); + + await expect(pageHeadEditLegalPerson).toHaveText( + 'บริษัท เอเชียเทค ซิสเต็มส์ จำกัด', + ); + + await page.waitForTimeout(2000); + await page.click("(//button[@id='btn-info-cancel'])[1]"); + + // การเข้าหน้าแก้ไขนายจ้างบุคคลธรรมดา + await page.waitForSelector('id=btn-kebab-action-ยศพัฒน์'); + await page.click('id=btn-kebab-action-ยศพัฒน์'); + await page.waitForSelector('id=btn-kebab-edit-ยศพัฒน์'); + await page.click('id=btn-kebab-edit-ยศพัฒน์'); + + const pageHeadEditNaturalPerson = page.locator( + "//span[text()='ยศพัฒน์ ธนากานต์']", + ); + + await expect(pageHeadEditNaturalPerson).toHaveText('ยศพัฒน์ ธนากานต์'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าแก้ไขนายจ้างนิติบุคคลและนายจ้างบุคคลธรรมดา'); +}); + +test('TC_2_4_011', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const companyNameTH = fakerTH.company.name(); + const companyNameEN = fakerEN.company.name(); + const firstNameTH = fakerTH.person.firstName('male'); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const lastNameEN = fakerEN.person.firstName(); + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // การเข้าหน้าแก้ไขนายจ้างนิติบุคคล + 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-register-name', companyNameTH); + await page.fill('id=input-register-name-en', companyNameEN); + + await page.click("(//button[@type='submit'])[1]"); + await page.waitForTimeout(2000); + await page.click("(//button[@id='btn-info-cancel'])[1]"); + + // ใช้ตัวแปรเดิมตรวจสอบผลลัพธ์ + const pageHeadEditLegalPerson = page.locator( + `//tr[contains(.,'${companyNameTH}') and contains(.,'022022002')]`, + ); + + await expect(pageHeadEditLegalPerson).toContainText(companyNameTH); + + // การเข้าหน้าแก้ไขนายจ้างบุคคลธรรมดา + await page.waitForSelector('id=btn-kebab-action-ยศพัฒน์'); + 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=info-input-first-name', firstNameTH); + await page.fill('id=info-input-last-name', lastNameTH); + await page.fill('id=info-input-first-name-en', firstNameEN); + await page.fill('id=info-input-last-name-en', lastNameEN); + + await page.click("(//button[@type='submit'])[1]"); + await page.waitForTimeout(2000); + await page.click("(//button[@id='btn-info-cancel'])[1]"); + + // ใช้ตัวแปรเดิมตรวจสอบผลลัพธ์ + const pageHeadEditNaturallPerson = page.locator( + `//tr[contains(.,'${firstNameTH} ${lastNameTH}') and contains (.,'--')]`, + ); + + await expect(pageHeadEditNaturallPerson).toContainText(firstNameTH); + await expect(pageHeadEditNaturallPerson).toContainText(lastNameTH); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขนายจ้างนิติบุคคลและนายจ้างบุคคลธรรมดาได้'); +}); + +test('TC_2_4_012', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ตรวจสอบการแสดงหน้าเพิ่มลูกจ้าง + const pageAddEmployee = page.locator( + "//form[contains(.,'เพิ่ม ลูกจ้าง') and contains (.,'ยังไม่มีข้อมูลแสดงในตารางนี้')]", + ); + + await expect(pageAddEmployee).toContainText('เพิ่ม ลูกจ้าง'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มลูกจ้าง'); +}); + +test('TC_2_4_013', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + const showTabPassport = page.locator( + 'id=dialog-tab-ข้อมูลหนังสือการเดินทาง', + ); + const showTabVisa = page.locator('id=dialog-tab-ข้อมูล Visa'); + const showTabHealthDetail = page.locator('id=dialog-tab-ข้อมูลสุขภาพ'); + const showTabJobDetail = page.locator('id=dialog-tab-ข้อมูลการทำงาน'); + const showTabMore = page.locator('id=dialog-tab-ข้อมูลอื่นๆ'); + + await expect(showTabPassport).toBeVisible; + await expect(showTabVisa).toBeVisible; + await expect(showTabHealthDetail).toBeVisible; + await expect(showTabJobDetail).toBeVisible; + await expect(showTabMore).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างลูกจ้างได้'); +}); + +test('TC_2_4_014', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + await page.waitForSelector('id=dialog-tab-ข้อมูลสุขภาพ'); + await page.click('id=dialog-tab-ข้อมูลสุขภาพ'); + + const showFormHealth = page.locator('id=employee-form-content'); + + await expect(showFormHealth).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงแท็ปข้อมูลสุขภาพครั้งที่ 1'); +}); + +// test('TC_2_4_015', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ +// const firstNameTH = fakerTH.person.firstName('male'); +// const middleNameTH = fakerTH.person.middleName(); +// const lastNameTH = fakerTH.person.lastName(); +// const firstNameEN = fakerEN.person.firstName(); +// const middleNameEN = fakerEN.person.middleName(); +// const lastNameEN = fakerEN.person.firstName(); + +// // เข้าสู่เมนูลูกค้า +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-customer'); +// await page.click('id=sub-menu-customer'); + +// // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง +// await page.waitForSelector('id=tab-employee'); +// await page.click('id=tab-employee'); +// await page.waitForSelector('id=btn-add'); +// await page.click('id=btn-add'); + +// // ส่วนข้อมูลพื้นฐาน +// await page.click('id=form-employee-select-employer-branch'); +// await page.waitForSelector('id=form-employee-select-employer-branch_0'); +// await page.click('id=form-employee-select-employer-branch_0'); +// await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + +// // ส่วนข้อมูลส่วนตัว +// await page.click('id=form-employee-select-prefix-name'); +// await page.waitForSelector('id=form-employee-select-prefix-name_0'); +// await page.click('id=form-employee-select-prefix-name_0'); +// await page.fill( +// "(//input[@id='form-employee-input-first-name'])[1]", +// firstNameTH, +// ); +// await page.fill('id=form-employee-input-last-name', lastNameTH); +// await page.fill('id=form-employee-input-first-name-en', firstNameEN); +// await page.fill('id=form-employee-input-last-name-en', lastNameEN); +// // วันเดิิอนปีเกิด +// await page.click('id=form-employee-input-birth-date'); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.click("//div[text()='1996']"); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); +// await page.click("//div[text()='พ.ค.']"); +// await page.click("//div[@id='1996-05-02']/div[1]"); + +// // สัญชาติ +// await page.click('id=form-employee-select-nationality'); +// await page.waitForSelector('id=form-employee-select-nationality_2'); +// await page.click('id=form-employee-select-nationality_2'); + +// await page.click('id=btn-info-basic-save'); +// await page.waitForTimeout(2000); + +// await page.waitForSelector('id=dialog-tab-ข้อมูลสุขภาพ'); +// await page.click('id=dialog-tab-ข้อมูลสุขภาพ'); + +// const showFormHealth = page.locator('id=employee-form-content'); + +// await expect(showFormHealth).toBeVisible; +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบแสดงแท็ปข้อมูลสุขภาพครั้งที่ 1'); +// }); + +test('TC_2_4_016', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + await page.waitForSelector('id=dialog-tab-ข้อมูลการทำงาน'); + await page.click('id=dialog-tab-ข้อมูลการทำงาน'); + + const showFormHealth = page.locator('id=employee-form-content'); + + await expect(showFormHealth).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงแท็ปข้อมูลการทำงาน'); +}); + +// test('TC_2_4_017', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ +// const firstNameTH = fakerTH.person.firstName('male'); +// const middleNameTH = fakerTH.person.middleName(); +// const lastNameTH = fakerTH.person.lastName(); +// const firstNameEN = fakerEN.person.firstName(); +// const middleNameEN = fakerEN.person.middleName(); +// const lastNameEN = fakerEN.person.firstName(); + +// // เข้าสู่เมนูลูกค้า +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-customer'); +// await page.click('id=sub-menu-customer'); + +// // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง +// await page.waitForSelector('id=tab-employee'); +// await page.click('id=tab-employee'); +// await page.waitForSelector('id=btn-add'); +// await page.click('id=btn-add'); + +// // ส่วนข้อมูลพื้นฐาน +// await page.click('id=form-employee-select-employer-branch'); +// await page.waitForSelector('id=form-employee-select-employer-branch_0'); +// await page.click('id=form-employee-select-employer-branch_0'); +// await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + +// // ส่วนข้อมูลส่วนตัว +// await page.click('id=form-employee-select-prefix-name'); +// await page.waitForSelector('id=form-employee-select-prefix-name_0'); +// await page.click('id=form-employee-select-prefix-name_0'); +// await page.fill( +// "(//input[@id='form-employee-input-first-name'])[1]", +// firstNameTH, +// ); +// await page.fill('id=form-employee-input-last-name', lastNameTH); +// await page.fill('id=form-employee-input-first-name-en', firstNameEN); +// await page.fill('id=form-employee-input-last-name-en', lastNameEN); +// // วันเดิิอนปีเกิด +// await page.click('id=form-employee-input-birth-date'); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.click("//div[text()='1996']"); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); +// await page.click("//div[text()='พ.ค.']"); +// await page.click("//div[@id='1996-05-02']/div[1]"); + +// // สัญชาติ +// await page.click('id=form-employee-select-nationality'); +// await page.waitForSelector('id=form-employee-select-nationality_2'); +// await page.click('id=form-employee-select-nationality_2'); + +// await page.click('id=btn-info-basic-save'); +// await page.waitForTimeout(2000); + +// await page.waitForSelector('id=dialog-tab-ข้อมูลการทำงาน'); +// await page.click('id=dialog-tab-ข้อมูลการทำงาน'); + +// const showFormHealth = page.locator('id=employee-form-content'); + +// await expect(showFormHealth).toBeVisible; +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบแสดงแท็ปข้อมูลการทำงาน'); +// }); + +test('TC_2_4_018', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + await page.waitForSelector('id=dialog-tab-ข้อมูลอื่นๆ'); + await page.click('id=dialog-tab-ข้อมูลอื่นๆ'); + + const showFormHealth = page.locator('id=employee-form-content'); + + await expect(showFormHealth).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงแท็ปข้อมูลอื่นๆ'); +}); + +test('TC_2_4_019', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // เข้าหน้าแท็ปข้อมูลอื่นๆ + await page.waitForSelector('id=dialog-tab-ข้อมูลอื่นๆ'); + await page.click('id=dialog-tab-ข้อมูลอื่นๆ'); + await page.fill( + "(//input[@id='form-employee-input-citizen-id'])[1]", + '2201182726324', + ); + await page.fill( + "(//input[@id='form-employee-input-citizen-id'])[2]", + '0882262262', + ); + await page.fill('id=form-employee-input-father-first-name', firstNameTH); + await page.fill('id=form-employee-input-father-last-name', lastNameTH); + await page.fill('id=form-employee-input-father-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-father-last-name-en', lastNameEN); + await page.fill('id=form-employee-input-mother-first-name', firstNameTH); + await page.fill('id=form-employee-input-mother-last-name', lastNameTH); + await page.fill('id=form-employee-input-mother-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-mother-last-name-en', lastNameEN); + await page.waitForSelector("(//button[@id='btn-info-health-save'])[2]"); + await page.click("(//button[@id='btn-info-health-save'])[2]"); + + const formEmployeeSave = page.locator('id=form-employee-other'); + await expect(formEmployeeSave).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการบันทึกข้อมูลส่วนข้อมูลอื่นๆ'); +}); + +// test('TC_2_4_020', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ +// const firstNameTH = fakerTH.person.firstName('male'); +// const middleNameTH = fakerTH.person.middleName(); +// const lastNameTH = fakerTH.person.lastName(); +// const firstNameEN = fakerEN.person.firstName(); +// const middleNameEN = fakerEN.person.middleName(); +// const lastNameEN = fakerEN.person.firstName(); + +// // เข้าสู่เมนูลูกค้า +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-customer'); +// await page.click('id=sub-menu-customer'); + +// // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง +// await page.waitForSelector('id=tab-employee'); +// await page.click('id=tab-employee'); +// await page.waitForSelector('id=btn-add'); +// await page.click('id=btn-add'); + +// // ส่วนข้อมูลพื้นฐาน +// await page.click('id=form-employee-select-employer-branch'); +// await page.waitForSelector('id=form-employee-select-employer-branch_0'); +// await page.click('id=form-employee-select-employer-branch_0'); +// await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + +// // ส่วนข้อมูลส่วนตัว +// await page.click('id=form-employee-select-prefix-name'); +// await page.waitForSelector('id=form-employee-select-prefix-name_0'); +// await page.click('id=form-employee-select-prefix-name_0'); +// await page.fill( +// "(//input[@id='form-employee-input-first-name'])[1]", +// firstNameTH, +// ); +// await page.fill('id=form-employee-input-last-name', lastNameTH); +// await page.fill('id=form-employee-input-first-name-en', firstNameEN); +// await page.fill('id=form-employee-input-last-name-en', lastNameEN); +// // วันเดิิอนปีเกิด +// await page.click('id=form-employee-input-birth-date'); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.click("//div[text()='1996']"); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); +// await page.click("//div[text()='พ.ค.']"); +// await page.click("//div[@id='1996-05-02']/div[1]"); + +// // สัญชาติ +// await page.click('id=form-employee-select-nationality'); +// await page.waitForSelector('id=form-employee-select-nationality_2'); +// await page.click('id=form-employee-select-nationality_2'); + +// await page.click('id=btn-info-basic-save'); +// await page.waitForTimeout(2000); +// //-------------------------------------เข้าหน้าแท็ปข้อมูลหนังสือเดินทาง---------------------------------- +// await page.waitForSelector('id=dialog-tab-ข้อมูล Visa'); +// await page.click('id=dialog-tab-ข้อมูล Visa'); + +// // ส่วนข้อมูลหนังสือเดินทาง +// await page.click( +// "(//input[@id='drawer-info-employee-select-visa-type'])[3]", +// ); +// await page.waitForSelector('id=drawer-info-employee-select-visa-type_0'); +// await page.click('id=drawer-info-employee-select-visa-type_0'); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-previous-passport-Number'])[2]", +// 'TH202273', +// ); +// await page.click( +// "(//input[@id='drawer-info-employee-select-prefix-name'])[2]", +// ); +// await page.waitForSelector('id=drawer-info-employee-select-prefix-name_0'); +// await page.click('iddrawer-info-employee-select-prefix-name_0'); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-first-name'])[2]", +// firstNameTH, +// ); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-last-name'])[2]", +// lastNameTH, +// ); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-first-name-en'])[2]", +// firstNameEN, +// ); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-last-name-en'])[2]", +// lastNameEN, +// ); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-passport-no'])[2]", +// 'TH202322', +// ); +// await page.click( +// "(//input[@id='drawer-info-employee-input-birth-date'])[2]", +// ); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.waitForSelector("//div[text()='2020']"); +// await page.click("//div[text()='2020']"); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[1]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); +// await page.waitForSelector("//div[text()='ม.ค.']"); +// await page.click("//div[text()='ม.ค.']"); +// await page.waitForSelector("//div[@id='2020-01-02']/div[1]"); +// await page.click("//div[@id='2020-01-02']/div[1]"); +// await page.click("(//input[@aria-label='สัญชาติ'])[2]"); +// await page.waitForSelector('id=drawer-info-employee-select-visa-type_2'); +// await page.click('id=drawer-info-employee-select-visa-type_2'); +// await page.click( +// "(//input[@id='drawer-info-employee-select-passport-country'])[2]", +// ); +// await page.waitForSelector( +// 'id=drawer-info-employee-select-passport-country_1', +// ); +// await page.click('id=drawer-info-employee-select-passport-country_1'); +// await page.click("(//button[@id='btn-info-basic-save'])[2]"); + +// // ตรวจสอบหลังจากทำการบันทึกข้อมูลหนังสือการเดินทาง +// const formPassportSave = page.locator("(//div[@id='form-passport'])[2]"); +// await expect(formPassportSave).toBeVisible; + +// //-------------------------------------เข้าหน้าแท็ปข้อมูล Visa---------------------------------------- +// await page.waitForSelector('id=dialog-tab-ข้อมูล Visa'); +// await page.click('id=dialog-tab-ข้อมูล Visa'); +// await page.click( +// "(//input[@id='drawer-info-employee-select-visa-type'])[3]", +// ); +// await page.waitForSelector('id=drawer-info-employee-select-visa-type_0'); +// await page.click('id=drawer-info-employee-select-visa-type_0'); +// await page.fill( +// "(//input[@aria-label='เลขที่ตรวจลงตรา'])[2]", +// '2202202220', +// ); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-visa-place'])[2]", +// 'กรุงเทพ', +// ); +// await page.click("(//input[@aria-label='ประเภทการตรวจลงตรา'])[2]"); +// await page.waitForSelector('id=drawer-info-employee-select-visa-type_1'); +// await page.click('id=drawer-info-employee-select-visa-type_1'); +// await page.fill( +// "(//input[@aria-label='บัตรขาเข้า หมายเลข TM'])[2]", +// '220322', +// ); +// await page.click( +// "(//input[@id='drawer-info-employee-date-picker-visa-enter'])[2]", +// ); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[2]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); +// await page.waitForSelector("//div[text()='2020']"); +// await page.click("//div[text()='2020']"); +// await page.waitForSelector( +// "(//button[@class='dp__btn dp__month_year_select'])[1]", +// ); +// await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); +// await page.waitForSelector("//div[text()='ม.ค.']"); +// await page.click("//div[text()='ม.ค.']"); +// await page.waitForSelector("//div[@id='2020-01-08']/div[1]"); +// await page.click("//div[@id='2020-01-08']/div[1]"); +// await page.fill( +// "(//input[@aria-label='เดินทางเข้ามาทางด่าน'])[2]", +// 'แม่สอด', +// ); +// await page.click( +// "(//input[@id='drawer-info-employee-select-issue-country'])[2]", +// ); +// await page.waitForSelector( +// 'id=drawer-info-employee-select-issue-country_1', +// ); +// await page.click('id=drawer-info-employee-select-issue-country_1'); +// await page.fill( +// "(//input[@id='drawer-info-employee-input-entry-count'])[2]", +// '300', +// ); +// await page.click("(//button[@id='btn-info-basic-save'])[2]"); + +// // ตรวจสอบหลังจากทำการบันทึกข้อมูล Visa +// const formSaveVisa = page.locator("(//div[@id='form-visa'])[2]"); +// await expect(formSaveVisa).toBeVisible; + +// //-------------------------------------เข้าหน้าแท็ปข้อมูลสุขภาพ---------------------------------------- +// await page.waitForSelector('id=dialog-tab-ข้อมูลสุขภาพ'); +// await page.click('id=dialog-tab-ข้อมูลสุขภาพ'); +// await page.click('id=form-employee-select-health-checkresult'); +// await page.waitForSelector('id=form-employee-select-health-checkresult_0'); +// await page.click('id=form-employee-select-health-checkresult_0'); +// await page.click('id=form-employee-select-checkup-type'); +// await page.waitForSelector('id=form-employee-select-checkup-type_0'); +// await page.click('id=form-employee-select-checkup-type_0'); +// await page.fill('id=form-employee-input-hospital', 'โรงพยาบาลตากสิน'); +// await page.click('id=form-employee-select-province'); +// await page.waitForSelector('id=form-employee-select-province_0'); +// await page.click('id=form-employee-select-province_0'); +// await page.click("(//button[@id='btn-info-health-save'])[2]"); + +// // ตรวจสอบหลังจากทำการบันทึกข้อมูลสุขภาพ +// const formSaveHelath = page.locator('id=form-employee-checkup-0'); +// await expect(formSaveHelath).toBeVisible; + +// //-------------------------------------เข้าหน้าแท็ปข้อมูลการทำงาน------------------------------------- +// await page.waitForSelector('id=dialog-tab-ข้อมูลการทำงาน'); +// await page.click('id=dialog-tab-ข้อมูลการทำงาน'); +// await page.fill("(//input[@id='form-employee-input-owner-name'])[1]",fakerTH.person.fullName()) +// await page.click("id=form-employee-select-province") +// await page.waitForSelector("id=form-employee-select-province_0") +// await page.click("id=form-employee-select-province_0") +// await page.click("id=form-employee-select-job-type") +// await page.waitForSelector("id=form-employee-select-job-type_0") +// await page.click("id=form-employee-select-job-type_0") +// await page.click("id=form-employee-select-position-name") +// await page.waitForSelector("id=form-employee-select-position-name_0") +// await page.click("id=form-employee-select-position-name_0") +// await page.fill("(//input[@id='form-employee-input-owner-name'])[2]",'2022832028200') +// await page.fill("(//input[@id='form-employee-input-owner-name'])[3]",'2202202930292') +// await page.fill("(//input[@aria-label='สถานที่ออกใบอนุญาต'])[2]",'กรุงเทพ') +// await page.click("(//button[@type='submit'])[2]") + +// // ตรวจสอบหลังจากทำการบันทึกข้อมูลการทำงาน +// const formWorkSave = page.locator("") + +// //-------------------------------------เข้าหน้าแท็ปข้อมูลอื่นๆ----------------------------------------- +// await page.waitForSelector('id=dialog-tab-ข้อมูลอื่นๆ'); +// await page.click('id=dialog-tab-ข้อมูลอื่นๆ'); +// await page.fill( +// "(//input[@id='form-employee-input-citizen-id'])[1]", +// '2201182726324', +// ); +// await page.fill( +// "(//input[@id='form-employee-input-citizen-id'])[2]", +// '0882262262', +// ); +// await page.fill('id=form-employee-input-father-first-name', firstNameTH); +// await page.fill('id=form-employee-input-father-last-name', lastNameTH); +// await page.fill('id=form-employee-input-father-first-name-en', firstNameEN); +// await page.fill('id=form-employee-input-father-last-name-en', lastNameEN); +// await page.fill('id=form-employee-input-mother-first-name', firstNameTH); +// await page.fill('id=form-employee-input-mother-last-name', lastNameTH); +// await page.fill('id=form-employee-input-mother-first-name-en', firstNameEN); +// await page.fill('id=form-employee-input-mother-last-name-en', lastNameEN); +// await page.waitForSelector("(//button[@id='btn-info-health-save'])[2]"); +// await page.click("(//button[@id='btn-info-health-save'])[2]"); + +// const formEmployeeSave = page.locator('id=form-employee-other'); +// await expect(formEmployeeSave).toBeVisible; +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบทำการบันทึกข้อมูลส่วนข้อมูลอื่นๆ'); +// }); + +test('TC_2_4_021', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + const showTabPassport = page.locator( + 'id=dialog-tab-ข้อมูลหนังสือการเดินทาง', + ); + const showTabVisa = page.locator('id=dialog-tab-ข้อมูล Visa'); + const showTabHealthDetail = page.locator('id=dialog-tab-ข้อมูลสุขภาพ'); + const showTabJobDetail = page.locator('id=dialog-tab-ข้อมูลการทำงาน'); + const showTabMore = page.locator('id=dialog-tab-ข้อมูลอื่นๆ'); + + await expect(showTabPassport).toBeVisible; + await expect(showTabVisa).toBeVisible; + await expect(showTabHealthDetail).toBeVisible; + await expect(showTabJobDetail).toBeVisible; + await expect(showTabMore).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างลูกจ้างได้'); +}); + +test('TC_2_4_022', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + // ส่วนข้อมูลที่อยู่ + await page.click('id=form-employee-custom'); + await page.fill('id=form-employee-input-address-no', '200/20'); + await page.fill("(//input[@id='form-employee-input-moo'])[1]", '2'); + await page.fill("(//input[@id='form-employee-input-soi'])[1]", '20'); + await page.fill( + "(//input[@id='form-employee-input-street'])[1]", + 'สุขุมวิท', + ); + await page.click('id=form-employee-select-province'); + await page.waitForSelector('id=form-employee-select-province_0'); + await page.click('id=form-employee-select-province_0'); + await page.click('id=form-employee-select-district'); + await page.waitForSelector('id=form-employee-select-district_0'); + await page.click('id=form-employee-select-district_0'); + await page.click('id=form-employee-select-sub-district'); + await page.waitForSelector('id=form-employee-select-sub-district_0'); + await page.click('id=form-employee-select-sub-district_0'); + await page.fill('id=form-employee-input-address-en', '200/20'); + await page.fill("(//input[@id='form-employee-input-moo'])[2]", '2'); + await page.fill("(//input[@id='form-employee-input-soi'])[2]", '20'); + await page.fill( + "(//input[@id='form-employee-input-street'])[2]", + 'Sukumvit', + ); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + // ตรวจสอบหลังจากบันทึก + const checkEmployeeCreate = page.locator( + `//td[contains(.,'${firstNameEN}') and contains(.,'${lastNameEN}') and contains(.,'${firstNameTH}') and contains(.,'${lastNameTH}')]`, + ); + + await expect(checkEmployeeCreate).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างลูกจ้างได้'); +}); + +test('TC_2_4_023', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + // ส่วนข้อมูลที่อยู่ + await page.click('id=form-employee-custom'); + await page.fill('id=form-employee-input-address-no', '200/20'); + await page.fill("(//input[@id='form-employee-input-moo'])[1]", '2'); + await page.fill("(//input[@id='form-employee-input-soi'])[1]", '20'); + await page.fill( + "(//input[@id='form-employee-input-street'])[1]", + 'สุขุมวิท', + ); + await page.click('id=form-employee-select-province'); + await page.waitForSelector('id=form-employee-select-province_0'); + await page.click('id=form-employee-select-province_0'); + await page.click('id=form-employee-select-district'); + await page.waitForSelector('id=form-employee-select-district_0'); + await page.click('id=form-employee-select-district_0'); + await page.click('id=form-employee-select-sub-district'); + await page.waitForSelector('id=form-employee-select-sub-district_0'); + await page.click('id=form-employee-select-sub-district_0'); + await page.fill('id=form-employee-input-address-en', '200/20'); + await page.fill("(//input[@id='form-employee-input-moo'])[2]", '2'); + await page.fill("(//input[@id='form-employee-input-soi'])[2]", '20'); + await page.fill( + "(//input[@id='form-employee-input-street'])[2]", + 'Sukumvit', + ); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + // ตรวจสอบหลังจากบันทึก + const checkEmployeeCreate = page.locator( + `//tr[contains(.,'${firstNameEN} ${lastNameEN}') and contains (.,'${firstNameTH} ${lastNameTH}')]`, + ); + + await expect(checkEmployeeCreate).toBeVisible; + + await expect(checkEmployeeCreate).toBeVisible; + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงข้อมูลลูกจ้างหลังสร้างถูกต้อง'); +}); + +test('TC_2_4_024', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + + // ----------------------------------------- การทำ Inactive ลูกจ้าง ----------------------------------------- + const kebabAction = page.locator(`id=btn-kebab-action-${firstNameTH}`); + await kebabAction.waitFor(); + await kebabAction.click(); + + const kebabStatus = page + .locator(`id=btn-kebab-status-${firstNameTH}`) + .nth(0); + await kebabStatus.click({ force: true }); + + const okDialog = page.locator('id=btn-ok-dialog'); + await okDialog.click(); + console.log('✅ เปลี่ยนสถานะเป็น Inactive สำเร็จ'); + + // ตรวจสอบสีของแถวหลังจากเปลี่ยนเป็น Inactive + const rowLocator = page.locator( + `//div[normalize-space(text())='${firstNameTH} ${lastNameTH}']`, + ); + await expect(rowLocator).toHaveCSS('background-color', 'rgba(0, 0, 0, 0)'); + console.log('✅ สีของแถวถูกเปลี่ยนเป็นสีเทาอ่อน'); + + // ---------------------------------------------- การทำ Active ลูกจ้าง ---------------------------------------- + await kebabAction.waitFor(); + await page.waitForTimeout(2000); + await kebabAction.click(); + + await kebabStatus.click({ force: true }); + + await okDialog.click(); + console.log('✅ เปลี่ยนสถานะเป็น Active สำเร็จ'); + + // ตรวจสอบสีของแถวหลังจากเปลี่ยนเป็น Active + await expect(rowLocator).toHaveCSS('background-color', 'rgba(0, 0, 0, 0)'); + console.log('✅ สีของแถวถูกเปลี่ยนเป็นสีขาว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถทำการ Active/InActive ลูกจ้างได้'); +}); + +test('TC_2_4_025', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + // การเปลี่ยนจำนวนในตารางจากแสดง 30 คน เป็น 1000 คน + await page.click("//span[normalize-space(text())='30']"); + await page.waitForSelector("//div[normalize-space(text())='1000']"); + await page.click("//div[normalize-space(text())='1000']"); + + // การแก้ไขลูกจ้าง + await page.waitForTimeout(2000); + await page.click(`id=btn-kebab-action-${firstNameTH}`); + await page.waitForSelector(`id=btn-kebab-edit-${firstNameTH}`); + await page.click(`id=btn-kebab-edit-${firstNameTH}`); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าแก้ไขลูกจ้าง'); +}); + +test('TC_2_4_026', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + // การเปลี่ยนจำนวนในตารางจากแสดง 30 คน เป็น 1000 คน + await page.click("//span[normalize-space(text())='30']"); + await page.waitForSelector("//div[normalize-space(text())='1000']"); + await page.click("//div[normalize-space(text())='1000']"); + + // การแก้ไขลูกจ้าง + await page.waitForTimeout(2000); + await page.click(`id=btn-kebab-action-${firstNameTH}`); + await page.waitForSelector(`id=btn-kebab-edit-${firstNameTH}`); + await page.click(`id=btn-kebab-edit-${firstNameTH}`); + + await page.fill( + "(//input[@id='drawer-info-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=drawer-info-employee-input-last-name', lastNameTH); + await page.fill('id=drawer-info-employee-input-first-name-en', firstNameEN); + await page.fill('id=drawer-info-employee-input-last-name-en', lastNameEN); + await page.click('id=btn-info-basic-save'); + await page.waitForSelector("(//button[@id='btn-info-close'])[2]"); + await page.click("(//button[@id='btn-info-close'])[2]"); + + const checkEditSave = page.locator( + ` //tr[contains(.,'${firstNameEN}') and contains (.,'${lastNameEN}') and contains (.,'${firstNameTH}') and contains (.,'${lastNameTH}')]`, + ); + + await expect(checkEditSave).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขลูกจ้างได้'); +}); + +test('TC_2_4_027', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // สร้างค่าชื่อบริษัทที่เหมือนกันทั้งภาษาไทยและอังกฤษ + const firstNameTH = fakerTH.person.firstName('male'); + const middleNameTH = fakerTH.person.middleName(); + const lastNameTH = fakerTH.person.lastName(); + const firstNameEN = fakerEN.person.firstName(); + const middleNameEN = fakerEN.person.middleName(); + const lastNameEN = fakerEN.person.firstName(); + + // เข้าสู่เมนูลูกค้า + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-customer'); + await page.click('id=sub-menu-customer'); + + // เข้าแท็ปลูกจ้างเพื่อทำการเพิ่มลูกจ้าง + await page.waitForSelector('id=tab-employee'); + await page.click('id=tab-employee'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.click('id=form-employee-select-employer-branch'); + await page.waitForSelector('id=form-employee-select-employer-branch_0'); + await page.click('id=form-employee-select-employer-branch_0'); + await page.fill('id=form-employee-input-nrc-no', '1223423112342'); + + // ส่วนข้อมูลส่วนตัว + await page.click('id=form-employee-select-prefix-name'); + await page.waitForSelector('id=form-employee-select-prefix-name_0'); + await page.click('id=form-employee-select-prefix-name_0'); + await page.fill( + "(//input[@id='form-employee-input-first-name'])[1]", + firstNameTH, + ); + await page.fill('id=form-employee-input-last-name', lastNameTH); + await page.fill('id=form-employee-input-first-name-en', firstNameEN); + await page.fill('id=form-employee-input-last-name-en', lastNameEN); + // วันเดิิอนปีเกิด + await page.click('id=form-employee-input-birth-date'); + await page.waitForSelector( + "(//button[@class='dp__btn dp__month_year_select'])[2]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='1996']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='พ.ค.']"); + await page.click("//div[@id='1996-05-02']/div[1]"); + + // สัญชาติ + await page.click('id=form-employee-select-nationality'); + await page.waitForSelector('id=form-employee-select-nationality_2'); + await page.click('id=form-employee-select-nationality_2'); + + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + + // การเปลี่ยนจำนวนในตารางจากแสดง 30 คน เป็น 1000 คน + await page.click("//span[normalize-space(text())='30']"); + await page.waitForSelector("//div[normalize-space(text())='1000']"); + await page.click("//div[normalize-space(text())='1000']"); + + // การแก้ไขลูกจ้าง + await page.waitForTimeout(2000); + await page.click(`id=btn-kebab-action-${firstNameTH}`); + await page.waitForSelector(`id=btn-kebab-edit-${firstNameTH}`); + await page.click(`id=btn-kebab-edit-${firstNameTH}`); + + await page.click( + "(//div[@id='drawer-info-employee-select-employer-branch'])[1]", + ); + await page.waitForSelector( + 'id=drawer-info-employee-select-employer-branch_1', + ); + await page.click('id=drawer-info-employee-select-employer-branch_1'); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.waitForSelector("(//button[@id='btn-info-close'])[2]"); + await page.click("(//button[@id='btn-info-close'])[2]"); + + const checkEditSave = page.locator( + `//tr[contains(.,'${firstNameEN}') and contains (.,'บริษัท สยาม เอ็นเนอร์จี โซลูชั่น จำกัด')]`, + ); + + await expect(checkEditSave).toContainText( + 'บริษัท สยาม เอ็นเนอร์จี โซลูชั่น จำกัด', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขนายจ้างในลูกจ้างได้'); +}); diff --git a/tests/01-Manage/MenuPersonel.spec.ts b/tests/01-Manage/MenuPersonel.spec.ts new file mode 100644 index 00000000..06c21b3b --- /dev/null +++ b/tests/01-Manage/MenuPersonel.spec.ts @@ -0,0 +1,1295 @@ +import { test, expect, Page } from '@playwright/test'; + +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('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'); + + // ถ้าทั้งหมดสำเร็จ + isLoginSuccessful = true; + console.log('ระบบทำการ Login สำเร็จ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login'); + isLoginSuccessful = false; + } +} +test('Login', async () => { + await login(page); +}); + +test('TC_2_2_001', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าจัดการบุคลากร'); +}); + +test('TC_2_2_002', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เข้าสู่หน้าเพิ่มบุคลการ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + const pageAddPersonel = page.locator( + "//div[contains(@class,'col text-subtitle1')]", + ); + const dialogFormInformation = page.locator('id=dialog-form-information'); + const dialogFormPersonal = page.locator('id=dialog-form-personal'); + const dialogFormInAddress = page.locator('id=dialog-form-address'); + + await expect(pageAddPersonel).toHaveText('เพิ่มบุคลากร'); + await expect(dialogFormInformation).toBeVisible(); + await expect(dialogFormPersonal).toBeVisible(); + await expect(dialogFormInAddress).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มบุคลากร'); +}); + +test('TC_2_2_003', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เข้าสู่หน้าเพิ่มบุคลการ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // กรอกข้อมูลพื้นฐานของบุคคลากร + // await page.click("//i[@aria-hidden='false']"); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.waitForSelector('id=select-hq-id_12'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'employeem'); + await page.click('id=select-user-type'); + await page.click('id=select-user-type_0'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_2'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'ธรรมรงด์'); + await page.fill('id=form-dialog-personnel-input-last-name', 'ดำรงธรรม'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Thamrong'); + await page.fill( + 'id=form-dialog-personnel-input-last-name-en', + 'Dumrongtum', + ); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'employeem@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='ชาย']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2000']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2000-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2010']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2010-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-regis-no', '2822282222421'); + await page.click('id=input-start-date'); + await page.click("//div[text()='11']"); + await page.click('id=input-retire-date'); + await page.click("//div[text()='21']"); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + await page.waitForSelector; + const displayNameLocator = page.locator( + "//div[normalize-space(text())='ธรรมรงด์ ดำรงธรรม']", + ); + + const displayName = (await displayNameLocator.textContent())?.trim() || ''; + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('ธรรมรงด์ ดำรงธรรม'); + console.log(displayName); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการเพิ่มพนักงาน'); +}); + +test('TC_2_2_004', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[2]"); + await page.click("(//div[@role='tab'])[2]"); + + // เข้าหน้าแก้ไขพนักงาน + await page.waitForSelector('id=btn-kebab-action-employeem'); + await page.click('id=btn-kebab-action-employeem'); + await page.waitForSelector('id=btn-kebab-edit-employeem'); + await page.click('id=btn-kebab-edit-employeem'); + + // แก้ไขข้อมูลพนักงาน + await page.fill( + "(//input[@id='drawer-info-personnel-input-first-name'])[1]", + 'ณัฐวัฒน์', + ); + await page.fill('id=drawer-info-personnel-input-last-name', 'วงศ์อนันต์'); + await page.fill('id=drawer-info-personnel-input-first-name-en', 'Nattawat'); + await page.fill('id=drawer-info-personnel-input-last-name-en', 'Wonganan'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + await page.waitForSelector; + const displayNameLocator = page.locator( + "//div[normalize-space(text())='ณัฐวัฒน์ วงศ์อนันต์']", + ); + + const displayName = (await displayNameLocator.textContent())?.trim() || ''; + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('ณัฐวัฒน์ วงศ์อนันต์'); + console.log(displayName); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการแก้ไขข้อมูลพนักงานได้'); +}); + +test('TC_2_2_005', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[2]"); + await page.click("(//div[@role='tab'])[2]"); + + // สร้างบุคลากรเพื่อทำการลบ + // เข้าสู่หน้าเพิ่มบุคลการ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // กรอกข้อมูลพื้นฐานของบุคคลากร + // await page.click("//i[@aria-hidden='false']"); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.waitForSelector('id=select-hq-id_12'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'employeetest'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_2'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'อารม'); + await page.fill('id=form-dialog-personnel-input-last-name', 'คมมา'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Aram'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Proma'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'employeem@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='ชาย']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2000']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2000-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2010']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2010-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-regis-no', '2822282222421'); + await page.click('id=input-start-date'); + await page.click("//div[text()='11']"); + await page.click('id=input-retire-date'); + await page.click("//div[text()='21']"); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // การลบบุคลากร + await page.waitForSelector('id=btn-kebab-action-employeetest'); + await page.click('id=btn-kebab-action-employeetest'); + await page.waitForSelector('id=btn-kebab-delete-employeetest'); + await page.click('id=btn-kebab-delete-employeetest'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + // ตรวจสอบหลังจากทำการลบ + const personalDeletedCheck = page.locator( + "//tr[contains(.,'อารม คมมา') and contains (.,'employeetest@mail.comAgent')]", + ); + + await expect(personalDeletedCheck).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบการลบบุคลากรออกจากระบบ'); +}); + +test('TC_2_2_006', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[3]"); + await page.click("(//div[@role='tab'])[3]"); + + // เข้าสู่หน้าเพิ่มบุคลการ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.waitForSelector('id=select-hq-id_12'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'courierw'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_6'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'มาตา'); + await page.fill('id=form-dialog-personnel-input-last-name', 'ลดา'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Mata'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Lada'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'courierw@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='หญิง']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2002']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2002-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2012']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2012-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-regis-no', '2822282222421'); + await page.click('id=input-start-date'); + await page.click("//div[text()='11']"); + await page.click('id=input-retire-date'); + await page.click("//div[text()='21']"); + await page.click('id=input-responsible-area'); + await page.waitForSelector('id=input-responsible-area_7'); + await page.click('id=input-responsible-area_7'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='มาตา ลดา']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('มาตา ลดา'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างพนักงานส่งเอกสาร'); +}); + +test('TC_2_2_007', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[3]"); + await page.click("(//div[@role='tab'])[3]"); + + // เปิดหน้าแก้ไขพนักงานส่งเอกสาร + await page.waitForTimeout(2000); + await page.click('id=btn-kebab-action-courierw'); + await page.waitForSelector('id=btn-kebab-edit-courierw'); + await page.click('id=btn-kebab-edit-courierw'); + + // แก้ไขชื่อพนักงานส่งเอกสาร + await page.fill( + "(//input[@id='drawer-info-personnel-input-first-name'])[1]", + 'อริสรา', + ); + await page.fill('id=drawer-info-personnel-input-last-name', 'ธนาพร'); + await page.fill('id=drawer-info-personnel-input-first-name-en', 'Arisara'); + await page.fill('id=drawer-info-personnel-input-last-name-en', 'Thanaporn'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='อริสรา ธนาพร']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('อริสรา ธนาพร'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการแก้ไขพนักงานส่งเอกสาร'); +}); + +test('TC_2_2_008', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[3]"); + await page.click("(//div[@role='tab'])[3]"); + + // ทดสอบการเพิ่มบุคลากรเพื่อทำการลบ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.waitForSelector('id=select-hq-id_12'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'test'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_6'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'ปริญญา'); + await page.fill('id=form-dialog-personnel-input-last-name', 'สุขเกษม'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Parinya'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Sukkasem'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'courierw@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='หญิง']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2002']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2002-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2012']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2012-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-regis-no', '2822282222421'); + await page.click('id=input-start-date'); + await page.click("//div[text()='11']"); + await page.click('id=input-retire-date'); + await page.click("//div[text()='21']"); + await page.click('id=input-responsible-area'); + await page.waitForSelector('id=input-responsible-area_7'); + await page.click('id=input-responsible-area_7'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // การลบบุคลากร + await page.waitForSelector('id=btn-kebab-action-test'); + await page.click('id=btn-kebab-action-test'); + await page.waitForSelector('id=btn-kebab-delete-test'); + await page.click('id=btn-kebab-delete-test'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + const courierDeletedCheck = page.locator( + "//div[normalize-space(text())='ปริญญา สุขเกษม']", + ); + + await expect(courierDeletedCheck).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการแก้ไขพนักงานส่งเอกสาร'); +}); + +test('TC_2_2_009', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[4]"); + await page.click("(//div[@role='tab'])[4]"); + + // ทดสอบการเพิ่มบุคลากรตัวแทน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'delegatem'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_8'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'อาคม'); + await page.fill('id=form-dialog-personnel-input-last-name', 'พลัง'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Akom'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Palang'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'delegatem@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='ชาย']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2004']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2004-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2014']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2014-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-discount-condition', 'ทดสอบข้อมูลการทำงาน'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='อาคม พลัง']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('อาคม พลัง'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างตัวแทน'); +}); + +test('TC_2_2_010', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[4]"); + await page.click("(//div[@role='tab'])[4]"); + + // เปิดหน้าแก้ไขพนักงานส่งเอกสาร + await page.waitForTimeout(2000); + await page.click('id=btn-kebab-action-delegatem'); + await page.waitForSelector('id=btn-kebab-edit-delegatem'); + await page.click('id=btn-kebab-edit-delegatem'); + + // แก้ไขชื่อพนักงานส่งเอกสาร + await page.fill( + "(//input[@id='drawer-info-personnel-input-first-name'])[1]", + 'ชยาภัสร์', + ); + await page.fill('id=drawer-info-personnel-input-last-name', 'นาคินทร์'); + await page.fill( + 'id=drawer-info-personnel-input-first-name-en', + 'Chayaphat', + ); + await page.fill('id=drawer-info-personnel-input-last-name-en', 'Nakin'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='ชยาภัสร์ นาคินทร์']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('ชยาภัสร์ นาคินทร์'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการแก้ไขตัวแทนได้'); +}); + +test('TC_2_2_011', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[4]"); + await page.click("(//div[@role='tab'])[4]"); + + // ทดสอบการเพิ่มบุคลากรเพื่อทำการลบ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'testdelegatem'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_8'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'อธิวัฒน์'); + await page.fill('id=form-dialog-personnel-input-last-name', 'พงษ์ศิริ'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Athiwat'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Phongsiri'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'delegatem@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='ชาย']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2004']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2004-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2014']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2014-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.fill('id=input-discount-condition', 'ทดสอบข้อมูลการทำงาน'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + + // ทำการลบตัวแทน + await page.waitForSelector('id=btn-kebab-action-testdelegatem'); + await page.click('id=btn-kebab-action-testdelegatem'); + await page.waitForSelector('id=btn-kebab-delete-testdelegatem'); + await page.click('id=btn-kebab-delete-testdelegatem'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + // ตรวจสอบหลีงจากทำการบุคลากรตัวแทน + const checkDelegatemDeleted = page.locator( + "//div[normalize-space(text())='อธิวัฒน์ พงษ์ศิริ']", + ); + await expect(checkDelegatemDeleted).toBeHidden(); + await page.waitForTimeout(2000); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถลบตัวแทนออกจากระบบได้'); +}); + +test('TC_2_2_012', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[5]"); + await page.click("(//div[@role='tab'])[5]"); + + // กรอกข้อมูลพื้นฐานของบุคคลากร + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.waitForSelector('id=select-hq-id_12'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'agencyw'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_2'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'ธิดา'); + await page.fill('id=form-dialog-personnel-input-last-name', 'งามตา'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Thida'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Yamta'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill('id=form-dialog-personnel-input-email', 'agencyw@mail.com'); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='หญิง']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2006']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2006-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2016']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2016-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.click('id=input-source-nationality'); + await page.click("(//div[@role='option'])[1]"); + await page.click('id=input-import-nationality'); + await page.click("(//div[@role='option'])[1]"); + await page.click('id=select-trainig-place'); + await page.click("//span[text()='สถานที่อบรมแรงงานเมียนมา-แม่สอด จ.ตาก']"); + await page.fill('id=input-checkpoint', 'แม่สอด'); + await page.fill('id=input-checkpoint-en', 'Maesod'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='ธิดา งามตา']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('ธิดา งามตา'); + + await page.waitForTimeout(2000); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถสร้างบุคลากรเอเจนซี่ได้'); +}); + +test('TC_2_2_013', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[5]"); + await page.click("(//div[@role='tab'])[5]"); + + // เปิดหน้าแก้ไขบุคลากรเอเจนซี่ + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-kebab-action-agencyw'); + await page.click('id=btn-kebab-action-agencyw'); + await page.waitForSelector('id=btn-kebab-edit-agencyw'); + await page.click('id=btn-kebab-edit-agencyw'); + + // แก้ไขชื่อพบัคลากรเอเจนซี่ + await page.fill( + "(//input[@id='drawer-info-personnel-input-first-name'])[1]", + 'นวพร', + ); + await page.fill('id=drawer-info-personnel-input-last-name', 'จารุวัฒน์ '); + await page.fill('id=drawer-info-personnel-input-first-name-en', 'Nawaporn'); + await page.fill('id=drawer-info-personnel-input-last-name-en', 'Jaruwat'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ดึงข้อมูลจาก Locator และนำ .textContent() เพื่อดึงมาแต่ข้อความจริง ๆ + const displayNameLocator = page.locator( + "//div[normalize-space(text())='นวพร จารุวัฒน์']", + ); + const displayName = (await displayNameLocator.textContent())?.trim(); + + // ตรวจสอบข้อมูลที่ดึงออกมา + expect(displayName).toBe('นวพร จารุวัฒน์'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารแก้ไขบุคลากรเอเจนซี่ได้'); +}); + +test('TC_2_2_014', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าบุคลากร + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-personnel'); + await page.click('id=sub-menu-personnel'); + + // เปิดแท็ปพนักงาน + await page.waitForSelector("(//div[@role='tab'])[5]"); + await page.click("(//div[@role='tab'])[5]"); + + // ทดสอบการเพิ่มบุคลากรเพื่อทำการลบ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector('id=select-hq-id', { + state: 'visible', + }); + await page.click('id=select-hq-id'); + await page.click('id=select-hq-id_12'); + + await page.waitForSelector('id=select-br-id', { state: 'visible' }); + await page.click('id=select-br-id'); + await page.click('id=select-br-id_4'); + await page.fill('id=input-username', 'agencytest'); + await page.click('id=select-user-role'); + await page.click('id=select-user-role_8'); + // await page.click("//div[@role='option']"); + + // กรอกชื่อข้อมูลพื้นฐาน + await page.fill('id=input-citizen-id', '1282262422820'); + await page.click( + "//label[@for='form-dialog-personnel-select-prefix-name']", + ); + await page.click('id=form-dialog-personnel-select-prefix-name_0'); + await page.fill('id=form-dialog-personnel-input-first-name', 'กิตติศักดิ์'); + await page.fill('id=form-dialog-personnel-input-last-name', 'วรากุล'); + await page.fill('id=form-dialog-personnel-input-first-name-en', 'Kittisak'); + await page.fill('id=form-dialog-personnel-input-last-name-en', 'Warakul'); + await page.fill('id=form-dialog-personnel-input-telephone', '08422622282'); + await page.fill( + 'id=form-dialog-personnel-input-email', + 'delegatem@mail.com', + ); + + // เลือกเพศ + await page.click('id=form-dialog-personnel-select-gender'); + await page.click("//span[text()='ชาย']"); + + // เลือกวันเกิด + await page.click('id=form-dialog-personnel-input-birth-date'); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2004']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2004-01-02']/div[1]"); + + // วันออกบัตร + await page.click( + "(//input[@id='form-dialog-personnel-input-citizen-issue'])[1]", + ); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[2]"); + await page.click("//div[text()='2014']"); + await page.click("(//button[@class='dp__btn dp__month_year_select'])[1]"); + await page.click("//div[text()='ม.ค.']"); + await page.click("//div[@id='2014-01-02']/div[1]"); + + // กรอกที่อยู่ + await page.fill('id=drawer-info-personnel-input-address-no', '20/1'); + await page.click('id=drawer-info-personnel-select-province'); + await page.waitForSelector('id=drawer-info-personnel-select-province_6', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-province_6'); + await page.click('id=drawer-info-personnel-select-district'); + await page.waitForSelector('id=drawer-info-personnel-select-district_2', { + state: 'visible', + }); + await page.click('id=drawer-info-personnel-select-district_2'); + await page.click('id=drawer-info-personnel-select-sub-district'); + await page.waitForSelector( + 'id=drawer-info-personnel-select-sub-district_1', + { + state: 'visible', + }, + ); + await page.click('id=drawer-info-personnel-select-sub-district_1'); + + // กรอกที่อยู่ภาษาอังกฤษ + await page.fill('id=drawer-info-personnel-input-address-en', '20/01'); + + // กรอกข้อมูลการทำงาน + await page.click('id=input-source-nationality'); + await page.click("(//div[@role='option'])[1]"); + await page.click('id=input-import-nationality'); + await page.click("(//div[@role='option'])[1]"); + await page.click('id=select-trainig-place'); + await page.click("//span[text()='สถานที่อบรมแรงงานเมียนมา-แม่สอด จ.ตาก']"); + await page.fill('id=input-checkpoint', 'แม่สอด'); + await page.fill('id=input-checkpoint-en', 'Maesod'); + + // กดปุ่มเพื่อสร้างบุคคลากร + await page.click('id=btn-info-basic-save'); + + // ทำการลบตัวแทน + await page.waitForSelector('id=btn-kebab-action-agencytest'); + await page.click('id=btn-kebab-action-agencytest'); + await page.waitForSelector('id=btn-kebab-delete-agencytest'); + await page.click('id=btn-kebab-delete-agencytest'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + // ตรวจสอบหลีงจากทำการบุคลากรตัวแทน + const checkDelegatemDeleted = page.locator( + "//div[normalize-space(text())='กิตติศักดิ์ วรากุล']", + ); + await expect(checkDelegatemDeleted).toBeHidden(); + await page.waitForTimeout(2000); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถลบบุคคลากรเอเจนซี่ออกจากระบบได้'); +}); diff --git a/tests/01-Manage/MenuProductandService.spec.ts b/tests/01-Manage/MenuProductandService.spec.ts new file mode 100644 index 00000000..20669f6b --- /dev/null +++ b/tests/01-Manage/MenuProductandService.spec.ts @@ -0,0 +1,1602 @@ +import { test, expect, Page } from '@playwright/test'; +import { faker, fakerEN, fakerTH } from '@faker-js/faker'; + +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'); + + // ถ้าทั้งหมดสำเร็จ + isLoginSuccessful = true; + console.log('ระบบทำการ Login สำเร็จ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login'); + isLoginSuccessful = false; + } +} +test('Login', async () => { + await login(page); +}); + +test('TC_3_3_001', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + const titleNameProductAndService = page.locator( + "//div[@id='app-content']/div[1]/div[1]/span[1]", + ); + await expect(titleNameProductAndService).toHaveText('สินค้าและบริการ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบเข้าสู่หน้าสินค้าและบริการ'); +}); + +test('TC_3_3_002', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + await page.click('id=btn-add'); + + const titleGroupProductAndService = page.locator( + "//div[contains(@class,'col text-subtitle1')]", + ); + await expect(titleGroupProductAndService).toHaveText( + 'เพิ่มกลุ่มสินค้าและบริการ', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มกลุ่มสินค้าและบริการ'); +}); + +test('TC_3_3_003', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + await page.click('id=btn-add'); + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill("(//input[@id='input-name'])[2]", 'ค่าบริการ'); + await page.click('id=btn-info-basic-save'); + + const checkGroupProductAndServiceCreate = page.locator( + "//div[normalize-space(text())='ค่าบริการ']", + ); + await expect(checkGroupProductAndServiceCreate).toHaveText('ค่าบริการ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการเพิ่มกลุ่มสินค้าและบริการ'); +}); + +test('TC_3_3_004', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + await page.click('id=btn-add'); + await page.waitForTimeout(2000); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[1]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@role='alert'])[2]", + 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('ระบบแจ้งเตือนในกรณีที่ไม่กรอกข้อมูล'); +}); + +test('TC_3_3_005', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + await page.click('id=btn-add'); + await page.fill("(//input[@id='input-name'])[2]", 'กลุ่มทดสอบ'); + await page.waitForTimeout(2000); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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( + 'ระบบแจ้งเตือนในกรณีที่กรอกชื่อกลุ่มสินค้าแต่ไม่เลือกสาขาที่ลงทะเบียน', + ); +}); + +test('TC_3_3_006', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + await page.click('id=btn-add'); + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.waitForTimeout(2000); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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('ระบบแจ้งเตือนในกรณีที่เลือกสาขาที่ลงทะเบียนแต่ไม่กรอกชื่อ'); +}); + +test('TC_3_3_007', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การแก้ไขกลุ่มสินค้าและบริการ + await page.click("(//button[@id='btn-kebab-action-ค่าบริการ'])[2]"); + await page.waitForSelector('id=btn-kebab-edit-ค่าบริการ'); + await page.click('id=btn-kebab-edit-ค่าบริการ'); + + await page.fill('id=input-name', 'ค่าบริการและสินค้า'); + await page.waitForTimeout(2000); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบหลังจากทำการแก้ไข + const editGroupAndService = page.locator( + "//div[normalize-space(text())='ค่าบริการและสินค้า']", + ); + await expect(editGroupAndService).toHaveText('ค่าบริการและสินค้า'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขกลุ่มสินค้าและบริการได้'); +}); + +test('TC_3_3_008', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การลบกลุ่มสินค้าและบริการ + await page.click( + "(//button[@id='btn-kebab-action-ค่าบริการและสินค้า'])[2]", + ); + 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 deleteGroupAndService = page.locator( + "//div[normalize-space(text())='ค่าบริการและสินค้า']", + ); + await expect(deleteGroupAndService).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log( + 'ระบบสามารถทำการลบกลุ่มสินค้าและบริการในกรณีที่ยังไม่มีการใช้งานได้', + ); +}); + +test('TC_3_3_009', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // ทดสอบการเพิ่มกลุ่มสินค้าและบริการ + await page.click('id=btn-add'); + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill("(//input[@id='input-name'])[2]", 'ค่าธรรมเนียม'); + await page.click('id=btn-info-basic-save'); + + // ทดสอบการเพิ่มสินค้าเพื่อทดสอบการลบ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector("(//input[@id='select-br-id'])[1]"); + await page.click("(//input[@id='select-br-id'])[1]"); + await page.waitForSelector('id=select-br-id_0'); + await page.click('id=select-br-id_0'); + await page.fill("(//input[@id='input-name'])[2]", 'ค่าธรรมเนียมอื่นๆ'); + await page.waitForTimeout(2000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + await page.reload(); + + // // การลบกลุ่มสินค้าและบริการ + await page.waitForTimeout(2000); + await page.click("(//button[@id='btn-kebab-action-ค่าธรรมเนียม'])[2]"); + await page.waitForTimeout(2000); + + // ตรวจสอบสีของปุ่ม "ลบ" ว่ากลายเป็นสีเทาหรือไม่ + const deleteText = page.locator("//span[text()='ลบ']"); + const color = await deleteText.evaluate((el) => { + const style = window.getComputedStyle(el); + return style.color; // ตรวจสอบค่า color ของปุ่ม + }); + + const expectedColor = 'rgb(125, 130, 130)'; // ค่าสีเทาที่คาดหวัง (คุณสามารถปรับสีตามที่ระบบของคุณใช้งาน) + expect(color).toBe(expectedColor); + console.log('✅ ปุ่ม "ลบ" เปลี่ยนเป็นสีเทา'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log( + 'ระบบไม่สามารถทำการลบกลุ่มสินค้าและบริการในกรณีที่มีการใช้งานได้', + ); +}); + +test('TC_3_3_010', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ตรวจสอบหน้าการเพิ่มสินค้า + const pageCreateProduceAndService = page.locator( + "//div[contains(@class,'col text-subtitle1')]", + ); + + await expect(pageCreateProduceAndService).toHaveText( + 'เพิ่มสินค้าและบริการ', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบเข้าสู่หน้าเพิ่มสินค้าและบริการ'); +}); + +test('TC_3_3_011', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลพื้นฐาน + await page.waitForSelector("(//input[@id='select-br-id'])[1]"); + await page.click("(//input[@id='select-br-id'])[1]"); + await page.waitForSelector('id=select-br-id_0'); + await page.click('id=select-br-id_0'); + await page.fill("(//input[@id='input-name'])[2]", 'ค่าธรรมเนียมการเดินทาง'); + await page.waitForTimeout(1000); + await page.waitForSelector("(//input[@id='select-br-id'])[2]"); + await page.click("(//input[@id='select-br-id'])[2]"); + await page.waitForSelector('id=select-br-id_1'); + await page.click('id=select-br-id_1'); + await page.waitForTimeout(1000); + + // ส่วนข้อมูลราคา + await page.click("(//div[@role='listitem'])[2]"); + await page.fill('id=input-price', '2000'); + await page.fill('id=input-agent-price', '1000'); + await page.fill('id=input-service-charge', '500'); + await page.waitForTimeout(1000); + + // // ส่วนข้อมูลเอกสาร + // await page.click("(//div[@role='listitem'])[3]"); + // await page.waitForSelector("//div[normalize-space(text())='เลือกเอกสาร']"); + // await page.click("//div[normalize-space(text())='เลือกเอกสาร']"); + // await page.waitForSelector("(//div[@class='q-checkbox__bg absolute'])[1]"); + // await page.click("(//div[@class='q-checkbox__bg absolute'])[1]"); + + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // ตรวจสอบหน้าการเพิ่มสินค้า + const createProductAndService = page.locator( + "//div[normalize-space(text())='ค่าธรรมเนียมการเดินทาง']", + ); + + await expect(createProductAndService).toHaveText('ค่าธรรมเนียมการเดินทาง'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถเพิ่มสินค้าและบริการได้'); +}); + +test('TC_3_3_012', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[1]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@role='alert'])[2]", + 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('ระบบทำการแจ้งเตือนในกรณีที่ไม่กรอกข้อมูล'); +}); + +test('TC_3_3_013', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.fill("(//input[@id='input-name'])[2]", 'ธรรมเนียม'); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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('ระบบทำการแจ้งเตือนในกรณีที่ไม่เลือกรหัสสินค้า'); +}); + +test('TC_3_3_014', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.click("(//input[@id='select-br-id'])[1]"); + await page.waitForSelector('id=select-br-id_0'); + await page.click('id=select-br-id_0'); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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('ระบบทำการแจ้งเตือนในกรณีที่ไม่กรอกชื่อสินค้า'); +}); + +test('TC_3_3_015', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การแก้ไขสินค้าและบริการ + await page.waitForSelector('id=btn-kebab-action-ค่าธรรมเนียมการเดินทาง'); + await page.click('id=btn-kebab-action-ค่าธรรมเนียมการเดินทาง'); + await page.waitForSelector('id=btn-kebab-edit-ค่าธรรมเนียมการเดินทาง'); + await page.click('id=btn-kebab-edit-ค่าธรรมเนียมการเดินทาง'); + await page.fill( + "(//input[@id='input-name'])[2]", + 'ค่าธรรมเนียมประกันสังคม', + ); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบการแก้ไขสินค้าและบริการ + const editProductAndService = page.locator( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + + await expect(editProductAndService).toHaveText('ค่าธรรมเนียมประกันสังคม'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขสินค้าได้'); +}); + +test('TC_3_3_016', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การเพิ่มสินค้า + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // เพิ่มสินค้าเพื่อทดสอบการลบ + await page.waitForSelector("(//input[@id='select-br-id'])[1]"); + await page.click("(//input[@id='select-br-id'])[1]"); + await page.waitForSelector('id=select-br-id_0'); + await page.click('id=select-br-id_0'); + await page.fill("(//input[@id='input-name'])[2]", 'ค่าธรรมเนียม MOU'); + await page.waitForTimeout(1000); + await page.waitForSelector("(//input[@id='select-br-id'])[2]"); + await page.click("(//input[@id='select-br-id'])[2]"); + await page.waitForSelector('id=select-br-id_1'); + await page.click('id=select-br-id_1'); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(2000); + + // การลบสินค้า + await page.waitForSelector('id=btn-kebab-action-ค่าธรรมเนียม MOU'); + await page.click('id=btn-kebab-action-ค่าธรรมเนียม MOU'); + await page.waitForSelector('id=btn-kebab-delete-ค่าธรรมเนียม MOU'); + await page.click('id=btn-kebab-delete-ค่าธรรมเนียม MOU'); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + // ตรวจสอบการลบสินค้า + const deleteProductAndService = page.locator( + "//div[normalize-space(text())='ค่าธรรมเนียม MOU']", + ); + + await expect(deleteProductAndService).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถทำการลบสินค้าในกรณีที่ยังไม่มีการใช้งานได้'); +}); + +test('TC_3_3_017', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-สินค้าและบริการ-ค่าธรรมเนียม'); + + // การลบสินค้า + await page.waitForSelector('id=btn-kebab-action-ค่าธรรมเนียมประกันสังคม'); + 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'); + await page.waitForTimeout(1000); + + // ตรวจสอบการลบสินค้า + const popUpWraningDeleteProduct = page.locator( + "//span[normalize-space(text())='สินค้าและบริการใช้งานอยู่']", + ); + + await expect(popUpWraningDeleteProduct).toHaveText( + 'สินค้าและบริการใช้งานอยู่', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบไม่สามารถทำการลบสินค้าในกรณีที่มีการใช้งานได้'); +}); + +test('TC_3_3_018', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const pageCreatePackage = page.locator( + "//div[contains(@class,'col text-subtitle1')]", + ); + await expect(pageCreatePackage).toHaveText('เพิ่มแพ็คเกจ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบเข้าสู่หน้าเพิ่มแพ็คเกจ'); +}); + +test('TC_3_3_019', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//button[contains(.,'จัดการ')]"); + await page.click("//button[contains(.,'จัดการ')]"); + await page.waitForSelector("//span[normalize-space(text())='เพิ่มงาน']"); + await page.click("//span[normalize-space(text())='เพิ่มงาน']"); + await page.fill('id=input-work-name-9', 'ค่าดำเนินการ'); + await page.waitForSelector('id=btn-save-work-name'); + await page.click('id=btn-save-work-name'); + await page.waitForSelector("(//button[@id='btn-form-close'])[2]"); + await page.click("(//button[@id='btn-form-close'])[2]"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//div[normalize-space(text())='ค่าดำเนินการ']"); + await page.click("//div[normalize-space(text())='ค่าดำเนินการ']"); + + // เพิ่มสินค้า + await page.waitForSelector("(//button[@id='btn-add-work-product'])[1]"); + await page.click("(//button[@id='btn-add-work-product'])[1]"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.click( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-form-submit'); + + // เพิ่มขั้นตอนการทำงาน + await page.waitForTimeout(1000); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + await page.waitForSelector('id=undefined'); + await page.click('id=undefined'); + await page.waitForSelector('id=undefined_0'); + await page.click('id=undefined_0'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const packageCreate = page.locator( + "//div[normalize-space(text())='มติครม 2568']", + ); + await expect(packageCreate).toHaveText('มติครม 2568'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารเพิ่มแพ็คเกจได้'); +}); + +test('TC_3_3_020', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[1]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@role='alert'])[2]", + 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('ระบบแจ้งเตือนในกรณีที่ไม่กรอกข้อมูล'); +}); + +test('TC_3_3_021', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.fill('id=input-service-name', 'มติ ครม'); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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('ระบบแจ้งเตือนในกรณีที่ไม่กรอกรหัสแพ็คเกจ'); +}); + +test('TC_3_3_022', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.fill('id=input-service-code', 'MOU'); + await page.click('id=btn-info-basic-save'); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[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('ระบบแจ้งเตือนในกรณีที่ไม่กรอกชื่อแพ็คเกจ'); +}); + +test('TC_3_3_023', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติ ครม'); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบการแจ้งเตือน + const headPopUpError = page.locator( + "//span[normalize-space(text())='แจ้งเตือน']", + ); + const popUpDetailError = page.locator( + "//span[normalize-space(text())='ข้อมูลงวดไม่ถูกต้อง กรุณาตรวจสอบและยืนยันว่าแต่ละงวดมีสินค้าอย่างน้อยหนึ่งรายการ']", + ); + + await expect(headPopUpError).toHaveText('แจ้งเตือน'); + await expect(popUpDetailError).toHaveText( + 'ข้อมูลงวดไม่ถูกต้อง กรุณาตรวจสอบและยืนยันว่าแต่ละงวดมีสินค้าอย่างน้อยหนึ่งรายการ', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแจ้งเตือนในกรณีที่ไม่กรอกข้อมูลส่วนข้อมูลงาน'); +}); + +test('TC_3_3_024', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//button[contains(.,'จัดการ')]"); + await page.click("//button[contains(.,'จัดการ')]"); + await page.waitForSelector("//span[normalize-space(text())='เพิ่มงาน']"); + await page.click("//span[normalize-space(text())='เพิ่มงาน']"); + await page.fill('id=input-work-name-10', 'ยื่นคำร้อง'); + await page.waitForSelector('id=btn-save-work-name'); + await page.click('id=btn-save-work-name'); + await page.waitForSelector("(//button[@id='btn-form-close'])[2]"); + await page.click("(//button[@id='btn-form-close'])[2]"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//div[normalize-space(text())='ยื่นคำร้อง']"); + await page.click("//div[normalize-space(text())='ยื่นคำร้อง']"); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const createNameWork = page.locator( + "(//span[@class='app-text-muted-2'])[1]", + ); + await expect(createNameWork).toHaveText('ยื่นคำร้อง'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการเลือกงานในแพ็คเกจได้'); +}); + +test('TC_3_3_025', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมรวม']", + ); + await page.click("//div[normalize-space(text())='ค่าธรรมเนียมรวม']"); + + // เพิ่มสินค้า + await page.waitForSelector("(//button[@id='btn-add-work-product'])[1]"); + await page.click("(//button[@id='btn-add-work-product'])[1]"); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const pageProduct = page.locator( + "(//div[contains(@class,'col text-subtitle1')])[2]", + ); + await expect(pageProduct).toHaveText('สินค้าและบริการทั้งหมด'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าสินค้าและบริการในแพ็คเกจ'); +}); + +test('TC_3_3_026', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//button[contains(.,'จัดการ')]"); + await page.click("//button[contains(.,'จัดการ')]"); + await page.waitForSelector("//span[normalize-space(text())='เพิ่มงาน']"); + await page.click("//span[normalize-space(text())='เพิ่มงาน']"); + await page.fill('id=input-work-name-11', 'ค่าธรรมเนียมรวม'); + await page.waitForSelector('id=btn-save-work-name'); + await page.click('id=btn-save-work-name'); + await page.waitForSelector("(//button[@id='btn-form-close'])[2]"); + await page.click("(//button[@id='btn-form-close'])[2]"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมรวม']", + ); + await page.click("//div[normalize-space(text())='ค่าธรรมเนียมรวม']"); + + // เพิ่มสินค้า + await page.waitForSelector("(//button[@id='btn-add-work-product'])[1]"); + await page.click("(//button[@id='btn-add-work-product'])[1]"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.click( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-form-submit'); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const createProduct = page.locator( + "//span[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await expect(createProduct).toHaveText('ค่าธรรมเนียมประกันสังคม'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการเพิ่มสินค้าในแพ็คเกจได้'); +}); + +test('TC_3_3_027', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมรวม']", + ); + await page.click("//div[normalize-space(text())='ค่าธรรมเนียมรวม']"); + + // เพิ่มขั้นตอนการทำงาน + await page.waitForTimeout(1000); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const pageProperties = page.locator( + "(//div[contains(@class,'col text-subtitle1')])[2]", + ); + await expect(pageProperties).toHaveText('คุณสมบัติ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าคุณสมบัติ'); +}); + +test('TC_3_3_028', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมรวม']", + ); + await page.click("//div[normalize-space(text())='ค่าธรรมเนียมรวม']"); + + // เพิ่มขั้นตอนการทำงาน + await page.waitForTimeout(1000); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + await page.waitForSelector('id=undefined'); + await page.click('id=undefined'); + await page.waitForSelector('id=undefined_0'); + await page.click('id=undefined_0'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const createProperties = page.locator( + "//span[@class='app-text-muted']/following-sibling::span[1]", + ); + await expect(createProperties).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถเพิ่มแม่แบบขั้นตอนการทำงานในแพ็คเกจได้'); +}); + +test('TC_3_3_029', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2568'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.waitForTimeout(2000); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมรวม']", + ); + await page.click("//div[normalize-space(text())='ค่าธรรมเนียมรวม']"); + + // เพิ่มขั้นตอนการทำงาน + await page.waitForTimeout(1000); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + await page.waitForSelector('id=undefined'); + await page.click('id=undefined'); + await page.waitForSelector('id=undefined_0'); + await page.click('id=undefined_0'); + await page.waitForTimeout(2000); + await page.click("(//button[@aria-expanded='false'])[2]"); + await page.waitForSelector('id=list-workerStatus'); + await page.click('id=list-workerStatus'); + await page.click('id=list-contactChannel'); + await page.waitForTimeout(1000); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + + // ตรวจสอบหลังจากเปิดหน้าเพิ่มแพ็คเกจ + const propertiesWorkerStatus = page.locator( + "(//span[contains(@class,'surface-2 bordered')])[3]", + ); + const propertiesContactChannel = page.locator( + "(//span[contains(@class,'surface-2 bordered')]/following-sibling::span)[3]", + ); + await expect(propertiesWorkerStatus).toHaveText('สถานะคนงาน'); + await expect(propertiesContactChannel).toHaveText('ช่องทางการติดต่อ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถเพิ่มคุณสมบัติในแม่แบบขั้นตอนในแพ็คเกจได้'); +}); + +test('TC_3_3_030', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การแก้ไขแพ็คเกจ + await page.click("//button[@id='btn-kebab-action-มติครม 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-มติครม 2568']"); + await page.click("//div[@id='btn-kebab-edit-มติครม 2568']"); + await page.fill('id=input-service-name', 'มติครม ประจำปี 2568'); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + const editPackageCheck = page.locator( + "//div[normalize-space(text())='มติครม ประจำปี 2568']", + ); + await expect(editPackageCheck).toHaveText('มติครม ประจำปี 2568'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขแพ็คเกจได้'); +}); + +test('TC_3_3_031', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // เข้าสู่หน้าสินค้าและบริการ + await page.click('id=menu.manage'); + await page.waitForSelector('id=sub-menu-productService'); + await page.click('id=sub-menu-productService'); + + // การเข้าสู่หน้าสินค้าและบริการ + await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); + await page.click('id=tree-enter-ค่าธรรมเนียม'); + await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + + // การเข้าสู่หน้าเพิ่มแพ็คเกจ + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนข้อมูลแพ็คเกจ + await page.fill('id=input-service-code', 'MOU'); + await page.fill('id=input-service-name', 'มติครม 2567'); + + // ส่วนข้อมูลงาน + await page.waitForSelector("(//div[@role='listitem'])[2]"); + await page.click("(//div[@role='listitem'])[2]"); + await page.click("(//button[@id='btn-add-work'])[1]"); + await page.waitForSelector("//div[@for='select-work-name-1']"); + await page.click("//div[@for='select-work-name-1']"); + await page.waitForSelector("//div[normalize-space(text())='ค่าดำเนินการ']"); + await page.click("//div[normalize-space(text())='ค่าดำเนินการ']"); + + // เพิ่มสินค้า + await page.waitForSelector("(//button[@id='btn-add-work-product'])[1]"); + await page.click("(//button[@id='btn-add-work-product'])[1]"); + await page.waitForSelector( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.click( + "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-form-submit'); + + // เพิ่มขั้นตอนการทำงาน + await page.waitForTimeout(1000); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + await page.waitForSelector('id=undefined'); + await page.click('id=undefined'); + await page.waitForSelector('id=undefined_0'); + await page.click('id=undefined_0'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + // การทำการลบแพ็คเกจ + await page.waitForSelector("//button[@id='btn-kebab-action-มติครม 2567']"); + await page.click("//button[@id='btn-kebab-action-มติครม 2567']"); + await page.waitForSelector("//div[@id='btn-kebab-delete-มติครม 2567']"); + await page.click("//div[@id='btn-kebab-delete-มติครม 2567']"); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + // ตรวจสอบหลังจากทำการลบแพ็คเกจ + const deletedPackageCompleted = page.locator( + "//div[normalize-space(text())='มติครม 2567']", + ); + + await expect(deletedPackageCompleted).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถทำการลบแพ็คเกจในกรณีที่ยังไม่มีการใช้งานได้'); +}); + +// test('TC_3_3_032', async () => { +// if (!isLoginSuccessful) { +// await login(page); +// } +// try { +// // เข้าสู่หน้าสินค้าและบริการ +// await page.click('id=menu.manage'); +// await page.waitForSelector('id=sub-menu-productService'); +// await page.click('id=sub-menu-productService'); + +// // การเข้าสู่หน้าสินค้าและบริการ +// await page.waitForSelector('id=tree-enter-ค่าธรรมเนียม'); +// await page.click('id=tree-enter-ค่าธรรมเนียม'); +// await page.waitForSelector('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); +// await page.click('id=tree-enter-แพ็คเกจ-ค่าธรรมเนียม'); + +// // การเข้าสู่หน้าเพิ่มแพ็คเกจ +// await page.waitForSelector('id=btn-add'); +// await page.click('id=btn-add'); + +// // ส่วนข้อมูลแพ็คเกจ +// await page.fill('id=input-service-code', 'MOU'); +// await page.fill('id=input-service-name', 'มติครม 2567'); + +// // ส่วนข้อมูลงาน +// await page.waitForSelector("(//div[@role='listitem'])[2]"); +// await page.click("(//div[@role='listitem'])[2]"); +// await page.click("(//button[@id='btn-add-work'])[1]"); +// await page.waitForSelector("//div[@for='select-work-name-1']"); +// await page.click("//div[@for='select-work-name-1']"); +// await page.waitForSelector("//div[normalize-space(text())='ค่าดำเนินการ']"); +// await page.click("//div[normalize-space(text())='ค่าดำเนินการ']"); + +// // เพิ่มสินค้า +// await page.waitForSelector("(//button[@id='btn-add-work-product'])[1]"); +// await page.click("(//button[@id='btn-add-work-product'])[1]"); +// await page.waitForSelector( +// "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", +// ); +// await page.click( +// "//div[normalize-space(text())='ค่าธรรมเนียมประกันสังคม']", +// ); +// await page.waitForTimeout(1000); +// await page.click('id=btn-form-submit'); + +// // เพิ่มขั้นตอนการทำงาน +// await page.waitForTimeout(1000); +// await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); +// await page.click("(//button[@id='btn-add-work-product'])[2]"); +// await page.waitForSelector('id=undefined'); +// await page.click('id=undefined'); +// await page.waitForSelector('id=undefined_0'); +// await page.click('id=undefined_0'); +// await page.waitForSelector('id=btn-form-submit'); +// await page.click('id=btn-form-submit'); + +// await page.waitForTimeout(1000); +// await page.click('id=btn-info-basic-save'); + +// // การทำการลบแพ็คเกจ +// await page.waitForSelector("//button[@id='btn-kebab-action-มติครม 2567']"); +// await page.click("//button[@id='btn-kebab-action-มติครม 2567']"); +// await page.waitForSelector("//div[@id='btn-kebab-delete-มติครม 2567']"); +// await page.click("//div[@id='btn-kebab-delete-มติครม 2567']"); +// await page.waitForSelector('id=btn-ok-dialog'); +// await page.click('id=btn-ok-dialog'); + +// // ตรวจสอบหลังจากทำการลบแพ็คเกจ +// const deletedPackageCompleted = page.locator( +// "//div[normalize-space(text())='มติครม 2567']", +// ); + +// await expect(deletedPackageCompleted).toBeHidden(); +// } catch (error) { +// console.error('เกิดข้อผิดพลาดในการทดสอบ', error); +// isLoginSuccessful = false; +// throw error; +// } +// await page.waitForTimeout(2000); +// console.log('ระบบสามารถทำการลบแพ็คเกจในกรณีที่ยังไม่มีการใช้งานได้'); +// }); diff --git a/tests/01-Manage/MenuWorkflow.spec.ts b/tests/01-Manage/MenuWorkflow.spec.ts new file mode 100644 index 00000000..7a9a4a33 --- /dev/null +++ b/tests/01-Manage/MenuWorkflow.spec.ts @@ -0,0 +1,1277 @@ +import { test, expect, Page } from '@playwright/test'; +import { fakerEN, fakerTH } from '@faker-js/faker'; +import e from 'express'; +import { isAwaitExpression } from 'typescript'; +import { parseCache } from 'vue/compiler-sfc'; +import AppDropdown from 'src/components/app/AppDropdown.vue'; + +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-workflow'); + await page.click('id=sub-menu-workflow'); + + // ถ้าทั้งหมดสำเร็จ + isLoginSuccessful = true; + console.log('ระบบทำการ Login สำเร็จ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการ Login'); + isLoginSuccessful = false; + } +} +test('Login', async () => { + await login(page); +}); + +test('TC_2_0_001', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + const titleNameProductAndService = page.locator( + "//div[@id='app-content']/div[1]/div[1]/span[1]", + ); + await expect(titleNameProductAndService).toHaveText( + 'แม่แบบขั้นตอนการทำงาน', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบเข้าสู่หน้าแม่แบบขั้นตอนการทำงาน'); +}); + +test('TC_2_0_002', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + const titleNameProductAndService = page.locator( + "//div[contains(@class,'col text-subtitle1')]", + ); + await expect(titleNameProductAndService).toHaveText( + 'แม่แบบขั้นตอนการทำงาน', + ); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.click('id=btn-form-close'); + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มแม่แบบขั้นตอนการทำงาน'); +}); + +test('TC_2_0_003', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การดำเนินการ 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click('id=select-responsible-institution-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-messenger'); + await page.click('id=list-messenger'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(1000); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + const createWorkflowName = page.locator( + "//section[normalize-space(text())='การดำเนินการ 2568']", + ); + await expect(createWorkflowName).toHaveText('การดำเนินการ 2568'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถสร้างแม่แบบขั้นตอนการทำงานได้'); +}); + +test('TC_2_0_004', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + const expectedErrors = [ + { + locator: "(//div[@role='alert'])[1]", + message: 'จำเป็นต้องกรอกข้อมูลนี้', + }, + { + locator: "(//div[@role='alert'])[2]", + 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.click('id=btn-form-close'); + await page.waitForTimeout(2000); + console.log('ระบบทำการแจ้งเตือนในกรณีที่ไม่กรอกข้อมูล'); +}); + +test('TC_2_0_005', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การดำเนินการ 2568']"); + await page.click("//div[@id='btn-kebab-edit-การดำเนินการ 2568']"); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าแก้ไขแม่แบบขั้นตอนการทำงานได้'); +}); + +test('TC_2_0_006', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การดำเนินการ 2568']"); + await page.click("//div[@id='btn-kebab-edit-การดำเนินการ 2568']"); + await page.fill( + "//input[@aria-label='ชื่อขั้นตอน']", + 'การดำเนินการ ตามมติ 2568', + ); + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + const editWorkFlow = page.locator( + "//td[contains(.,'การดำเนินการ ตามมติ 2568')]", + ); + await expect(editWorkFlow).toHaveText('การดำเนินการ ตามมติ 2568'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขแม่แบบขั้นตอนการทำงานได้'); +}); + +test('TC_2_0_007', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.click( + "//button[@id='btn-kebab-action-การดำเนินการ ตามมติ 2568']", + ); + await page.waitForSelector( + "//div[@id='btn-kebab-delete-การดำเนินการ ตามมติ 25688']", + ); + await page.click("//div[@id='btn-kebab-delete-การดำเนินการ ตามมติ 25688']"); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + + const deletedWorkFlow = page.locator( + "//td[contains(.,'การดำเนินการ ตามมติ 2568')]", + ); + await expect(deletedWorkFlow).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถลบแม่แบบขั้นตอนการทำงานได้'); +}); + +test('TC_2_0_008', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + //-----------------------ทดสอบการสร้างชื่อแม่แบบขั้นจอนการทำงาน------------------------------------ + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การดำเนินการ 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click('id=select-responsible-institution-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-messenger'); + await page.click('id=list-messenger'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(1000); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + //-----------------------------ทดสอลการสร้างชื่อซ้ำ------------------------------------- + await page.waitForTimeout(2000); + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การดำเนินการ 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click('id=select-responsible-institution-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-messenger'); + await page.click('id=list-messenger'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(1000); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + // ตรวจสอบการสร้างชื่อซำ้ + const workflowSameNameError = page.locator( + "//span[normalize-space(text())='ชื่อนี้ถูกใช้ไปแล้ว']", + ); + await expect(workflowSameNameError).toHaveText('ชื่อนี้ถูกใช้ไปแล้ว'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแจ้งเตือนในกรณีที่สร้างชื่อแม่แบบขั้นตอนการทำงานซ้ำกัน'); +}); + +test('TC_2_0_009', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การดำเนินการ 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + + const pageCreateWorkFlowFirst = page.locator("(//div[@id='item-up'])[2]"); + await expect(pageCreateWorkFlowFirst).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงขั้นตอนการทำงานขั้นตอนที่ 1'); + await page.click('id=btn-form-close'); +}); + +test('TC_2_0_010', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การประเมิน 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click('id=select-responsible-institution-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-AGE-dialog']//div)[1]", + ); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-messenger'); + await page.click('id=list-messenger'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(1000); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + const createWorkflowName = page.locator( + "//section[normalize-space(text())='การประเมิน 2568']", + ); + await expect(createWorkflowName).toHaveText('การประเมิน 2568'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบทำการสร้างแม่แบบขั้นตอนการทำงาน'); +}); + +test('TC_2_0_011', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // แก้ไขแขั้นตอนการทำงาน + await page.click("//button[@id='btn-kebab-action-การประเมิน 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + await page.click("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + const pageEditWorkFlowFirst = page.locator( + "(//div[@id='item-up']//div)[1]", + ); + await expect(pageEditWorkFlowFirst).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าแก้ไขขั้นตอนการทำงาน'); +}); + +test('TC_2_0_012', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // แก้ไขแขั้นตอนการทำงาน + await page.click("//button[@id='btn-kebab-action-การประเมิน 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + await page.click("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-designForm'); + await page.click('id=list-designForm'); + await page.waitForSelector('id=list-quotationNo'); + await page.click('id=list-quotationNo'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForSelector('id=select-responsible-institution-0-drawer'); + await page.click('id=select-responsible-institution-0-drawer'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-DOE-drawer']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-DOE-drawer']//div)[1]", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(1000); + await page.click("//button[@id='btn-kebab-action-การประเมิน 2568']"); + + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การประเมิน 2568']", + ); + await page.click("//div[@id='btn-kebab-view-detail-การประเมิน 2568']"); + const editWorkFlowFirst = page.locator( + "//span[normalize-space(text())='ออกแบบฟอร์ม']", + ); + const editWorkFlowSeconde = page.locator( + "//span[normalize-space(text())='Quotation No.']", + ); + const editWorkFlowAgencies = page.locator( + "//span[normalize-space(text())='จัดหางานพื้นที่']", + ); + + await expect(editWorkFlowFirst).toBeVisible(); + await expect(editWorkFlowSeconde).toBeVisible(); + await expect(editWorkFlowAgencies).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_013', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // ลบขั้นตอนการทำงาน + await page.click("//button[@id='btn-kebab-action-การประเมิน 2568']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + await page.click("//div[@id='btn-kebab-edit-การประเมิน 2568']"); + await page.waitForSelector('id=btn-delete-work'); + await page.click('id=btn-delete-work'); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(1000); + await page.click( + "//button[@id='btn-kebab-action-cm78fi5u50004lj1yczab47oa']", + ); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การประเมิน 2568']", + ); + await page.click("//div[@id='btn-kebab-view-detail-การประเมิน 2568']"); + + const deleteProcessStep = page.locator("(//div[@id='item-up']//div)[1]"); + + await expect(deleteProcessStep).toBeHidden(); + } 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_014', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'การดำเนินการ 2567', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.fill("(//textarea[@aria-label='รายละเอียด'])[2]", 'รายละเอียด'); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + await page.waitForTimeout(1000); + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2567']"); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']", + ); + await page.click("//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']"); + + const detailProcessStep = page.locator( + "//div[normalize-space(text())='รายละเอียด']", + ); + await expect(detailProcessStep).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_015', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2567']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การดำเนินการ 2567']"); + await page.click("//div[@id='btn-kebab-edit-การดำเนินการ 2567']"); + await page.fill( + "//div[normalize-space(text())='รายละเอียด']", + 'แก้ไขรายละเอียด', + ); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(1000); + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2567']"); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']", + ); + await page.click("//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']"); + + const detailProcessStep = page.locator( + "//div[normalize-space(text())='รายละเอียด']", + ); + await expect(detailProcessStep).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_016', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2567']"); + await page.waitForSelector("//div[@id='btn-kebab-edit-การดำเนินการ 2567']"); + await page.click("//div[@id='btn-kebab-edit-การดำเนินการ 2567']"); + await page.fill("//div[normalize-space(text())='รายละเอียด']", ''); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + await page.waitForTimeout(1000); + await page.click("//button[@id='btn-kebab-action-การดำเนินการ 2567']"); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']", + ); + await page.click("//div[@id='btn-kebab-view-detail-การดำเนินการ 2567']"); + + const deleteDetailProcessStep = page.locator( + "//div[normalize-space(text())='รายละเอียด']", + ); + await expect(deleteDetailProcessStep).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_017', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + + const nameResoinsiblePerson = page.locator("(//div[@role='menu']//div)[1]"); + await expect(nameResoinsiblePerson).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงรายชื่อบุคลากรเพื่อให้เลิือกผู้รับผิดชอบ'); + await page.keyboard.press('Escape'); + await page.click('id=btn-form-close'); +}); + +test('TC_2_0_018', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.click('id=select-responsible-person-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-dialog'])[1]", + ); + await page.waitForSelector("(//button[@id='btn-info-basic-save'])[2]"); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + // ดูรายละเอียกหลังเพิ่มผู้รับผิดชอบ + await page.waitForTimeout(1000); + await page.click( + "//button[@id='btn-kebab-action-ขั้นตอนการเตรียมเอกสารประกันสังคม']", + ); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม']", + ); + await page.click( + "//div[@id='btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม']", + ); + + const nameResoinsiblePersonCreate = page.locator( + "//div[@class='column q-pl-md']", + ); + await expect(nameResoinsiblePersonCreate).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_019', async () => { + 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.click('id=select-responsible-person-0-drawer'); + await page.waitForSelector('id=select-responsible-person-0-สามารถ-drawer'); + await page.click('id=select-responsible-person-0-สามารถ-drawer'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-drawer'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-drawer'])[1]", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + // ดูรายละเอียดหลังแก้ไขผู้รับผิดชอบ + + await page.click("id=btn-kebab-action-ขั้นตอนการเตรียมเอกสารประกันสังคม'"); + await page.waitForSelector( + 'id=btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + await page.click( + 'id=btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + + const nameResoinsiblePersonEdit = page.locator( + "//div[@class='column q-pl-md']", + ); + await expect(nameResoinsiblePersonEdit).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_020', async () => { + 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.click('id=select-responsible-person-0-drawer'); + await page.waitForSelector( + "(//div[@id='select-responsible-person-0-กานดา-drawer'])[1]", + ); + await page.click( + "(//div[@id='select-responsible-person-0-กานดา-drawer'])[1]", + ); + await page.waitForTimeout(1000); + await page.click('id=btn-info-basic-save'); + + // ดูรายละเอียดหลังลบผู้รับผิดชอบ + await page.click('id=btn-kebab-action-ขั้นตอนการเตรียมเอกสารประกันสังคม'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + await page.click( + 'id=btn-kebab-view-detail-ขั้นตอนการเตรียมเอกสารประกันสังคม', + ); + + const nameResoinsiblePersonEdit = page.locator( + "//div[@class='column q-pl-md']", + ); + await expect(nameResoinsiblePersonEdit).toBeHidden(); + } 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_021', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'กระบวนการดำเนินงาน 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.waitForSelector("(//button[@id='btn-add-work-product'])[2]"); + await page.click("(//button[@id='btn-add-work-product'])[2]"); + + const pageAddProperties = page.locator( + "(//div[contains(@class,'col text-subtitle1')])[2]", + ); + await expect(pageAddProperties).toHaveText('คุณสมบัติ'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงหน้าเพิ่มคุณสมบัติ'); + await page.click("(//button[@id='btn-form-close'])[2]"); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); +}); + +test('TC_2_0_022', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'กระบวนการดำเนินงาน 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-serviceRecordName'); + await page.click('id=list-serviceRecordName'); + await page.waitForTimeout(1000); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(2000); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const addPropertiesProcessStep = page.locator( + "(//span[contains(@class,'surface-2 bordered')])[2]", + ); + await expect(addPropertiesProcessStep).toHaveText('บันทึกบริการ_Name'); + } 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_023', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเข้าสู่หน้าเพิ่มแม่แบบขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + + // ส่วนชื่อแม่แบบ + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@aria-label='ชื่อขั้นตอน'])[2]", + 'กระบวนการดำเนินงาน 2568', + ); + + // ส่วนขั้นตอนการทำงาน + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'ตรวจเอกสารตามมติครม'); + await page.waitForSelector('id=btn-add-work-product-0-dialog'); + await page.click('id=btn-add-work-product-0-dialog'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-messenger'); + await page.click('id=list-messenger'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForTimeout(1000); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + await page.waitForTimeout(1000); + + // ตรวจสอบการดูรายละเอียดหลังเพิ่มคุณสมบัติ + await page.waitForSelector('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568', + ); + await page.click('id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const addPropertiesProcessStep = page.locator( + "//span[normalize-space(text())='พนักงานส่งเอกสาร']", + ); + await expect(addPropertiesProcessStep).toHaveText('พนักงานส่งเอกสาร'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถเพิ่มคุณสมบัติและบันทึกได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); + +test('TC_2_0_024', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // แก้ไขคุณสมบัติ + await page.waitForSelector('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector('id=btn-kebab-edit-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-edit-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector('id=btn-add-work-product-0-drawer'); + await page.click('id=btn-add-work-product-0-drawer'); + await page.waitForSelector('id=select-step'); + await page.click('id=select-step'); + await page.waitForSelector('id=list-quotationNo'); + await page.click('id=list-quotationNo'); + await page.waitForSelector('id=list-designForm'); + await page.click('id=list-designForm'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบการดูรายละเอียดหลังเพิ่มคุณสมบัติ + await page.waitForSelector('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568', + ); + await page.click('id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const addPropertiesProcessStepFirst = page.locator( + "//span[normalize-space(text())='ออกแบบฟอร์ม']", + ); + await expect(addPropertiesProcessStepFirst).toHaveText('ออกแบบฟอร์ม'); + + const addPropertiesProcessStepSecond = page.locator( + "//span[normalize-space(text())='Quotation No.']", + ); + await expect(addPropertiesProcessStepSecond).toHaveText('Quotation No.'); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขคุณสมบัติได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); + +test('TC_2_0_025', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // แก้ไขคุณสมบัติ + await page.waitForSelector('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector('id=btn-kebab-edit-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-edit-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector('id=btn-add-work-product-0-drawer'); + await page.click('id=btn-add-work-product-0-drawer'); + await page.waitForSelector("(//button[@id='btn-delete-work-product'])[3]"); + await page.click("(//button[@id='btn-delete-work-product'])[3]"); + await page.waitForSelector('id=btn-ok-dialog'); + await page.click('id=btn-ok-dialog'); + await page.waitForSelector('id=btn-form-submit'); + await page.click('id=btn-form-submit'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // ตรวจสอบการดูรายละเอียดหลังเพิ่มคุณสมบัติ + await page.waitForSelector('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.click('id=btn-kebab-action-กระบวนการดำเนินงาน 2568'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568', + ); + await page.click('id=btn-kebab-view-detail-กระบวนการดำเนินงาน 2568'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const addPropertiesProcessStepFirst = page.locator( + "//span[normalize-space(text())='ออกแบบฟอร์ม']", + ); + await expect(addPropertiesProcessStepFirst).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถลบคุณสมบัติได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); + +test('TC_2_0_026', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเพิ่มหน่วยงานในขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.waitForSelector("(//button[@id='btn-add-step'])[2]"); + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.click('id=select-responsible-institution-0-dialog'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const menuAgencise = page.locator("//div[@role='menu']"); + await expect(menuAgencise).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบแสดงรายการเลือกหน่วยงาน'); + await page.keyboard.press('Escape'); + await page.waitForSelector('id=btn-form-close'); + await page.click('id=btn-form-close'); +}); + +test('TC_2_0_027', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // การเพิ่มหน่วยงานในขั้นตอนการทำงาน + await page.waitForSelector('id=btn-add'); + await page.click('id=btn-add'); + await page.click("(//input[@id='select-hq-id'])[2]"); + await page.waitForSelector('id=select-hq-id_0'); + await page.click('id=select-hq-id_0'); + await page.fill( + "(//input[@id='input-flow-template-name'])[2]", + 'การดำเนินการเตรียมการ', + ); + await page.waitForSelector("(//button[@id='btn-add-step'])[2]"); + await page.click("(//button[@id='btn-add-step'])[2]"); + await page.fill('id=input-flow-step-name-0-dialog', 'เตรียมเอกสาร'); + await page.click('id=select-responsible-institution-0-dialog'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-AGE-drawer']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-AGE-drawer']//div)[1]", + ); + await page.keyboard.press('Escape'); + await page.click("(//button[@id='btn-info-basic-save'])[2]"); + + // เปิดดูรายละเอียด + await page.waitForSelector( + "//button[@id='btn-kebab-action-การดำเนินการเตรียมการ']", + ); + await page.click("//button[@id='btn-kebab-action-การดำเนินการเตรียมการ']"); + await page.waitForSelector( + "//div[@id='btn-kebab-view-detail-การดำเนินการเตรียมการ']", + ); + await page.click( + "//div[@id='btn-kebab-view-detail-การดำเนินการเตรียมการ']", + ); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const addAgenciseWorkFlow = page.locator( + "//span[normalize-space(text())='เอเจนซี่ / หน่วยงาน']", + ); + await expect(addAgenciseWorkFlow).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถเลือกหน่วยงานได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); + +test('TC_2_0_028', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // แก้ไขหน่วยงาน + await page.waitForSelector('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.waitForSelector('id=btn-kebab-edit-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-edit-การดำเนินการเตรียมการ'); + await page.waitForSelector('id=select-responsible-institution-0-drawer'); + await page.click('id=select-responsible-institution-0-drawer'); + await page.waitForSelector( + "(//div[@id='select-responsible-institution-0-DOE-drawer']//div)[1]", + ); + await page.click( + "(//div[@id='select-responsible-institution-0-DOE-drawer']//div)[1]", + ); + await page.keyboard.press('Escape'); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // เปิดดูรายละเอียดหลังแก้ไข + await page.waitForSelector('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-การดำเนินการเตรียมการ', + ); + await page.click('id=btn-kebab-view-detail-การดำเนินการเตรียมการ'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const checkEditAgenciseWorkFlow = page.locator( + "//span[normalize-space(text())='จัดหางานพื้นที่']", + ); + await expect(checkEditAgenciseWorkFlow).toBeVisible(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถแก้ไขหน่วยงานได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); + +test('TC_2_0_029', async () => { + if (!isLoginSuccessful) { + await login(page); + } + try { + // ลบหน่วยงาน + await page.waitForSelector('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.waitForSelector('id=btn-kebab-edit-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-edit-การดำเนินการเตรียมการ'); + await page.waitForSelector("(//i[@aria-hidden='false'])[2]"); + await page.click("(//i[@aria-hidden='false'])[2]"); + await page.waitForSelector('id=btn-info-basic-save'); + await page.click('id=btn-info-basic-save'); + + // เปิดดูรายละเอียดหลังลบ + await page.waitForSelector('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.click('id=btn-kebab-action-การดำเนินการเตรียมการ'); + await page.waitForSelector( + 'id=btn-kebab-view-detail-การดำเนินการเตรียมการ', + ); + await page.click('id=btn-kebab-view-detail-การดำเนินการเตรียมการ'); + + // ตรวจสอบการแสดงผลหลังจากเพิ่มคุณสมบัติ + const checkDeleteAgenciseWorkFlow = page.locator( + "//span[normalize-space(text())='จัดหางานพื้นที่']", + ); + await expect(checkDeleteAgenciseWorkFlow).toBeHidden(); + } catch (error) { + console.error('เกิดข้อผิดพลาดในการทดสอบ', error); + isLoginSuccessful = false; + throw error; + } + await page.waitForTimeout(2000); + console.log('ระบบสามารถลบหน่วยงานได้'); + await page.waitForSelector('id=btn-info-close'); + await page.click('id=btn-info-close'); +}); diff --git a/tests/02-Sales/MenuQuotation.spec.ts b/tests/02-Sales/MenuQuotation.spec.ts new file mode 100644 index 00000000..013b8468 --- /dev/null +++ b/tests/02-Sales/MenuQuotation.spec.ts @@ -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); +});