From c66dc2ecf8cc5f997b03bbbc417fd4a54bd342a8 Mon Sep 17 00:00:00 2001 From: Misaka Date: Sun, 1 Mar 2026 12:21:58 +0800 Subject: [PATCH] feat: define ERP page element locators Co-Authored-By: Claude Sonnet 4.5 --- src/main/services/erp/locators.ts | 44 +++++++++++++++++++++++++++++++ tests/unit/locators.test.ts | 26 ++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/main/services/erp/locators.ts create mode 100644 tests/unit/locators.test.ts diff --git a/src/main/services/erp/locators.ts b/src/main/services/erp/locators.ts new file mode 100644 index 0000000..f1fefd8 --- /dev/null +++ b/src/main/services/erp/locators.ts @@ -0,0 +1,44 @@ +/** + * ERP Page Element Locators + * Reference: playwrite/utils/ discrete_material_plan_extractor.py + * Reference: playwrite/utils/ discrete_material_plan_cleaner.py + */ + +export const ERP_LOCATORS = { + // Login Page + login: { + usernameInput: '#username', + passwordInput: '#password', + submitButton: 'button[type="submit"]', + }, + + // Main Frame + main: { + mainIframe: '#mainiframe', + loadingOverlay: '.loading-overlay', + contentFrame: '#contentframe', + }, + + // Extractor (Data Export) Page + extractor: { + orderNumberInput: 'input[name="orderNumber"]', + queryButton: 'button:has-text("查询")', + exportButton: 'button:has-text("导出")', + }, + + // Cleaner (Material Delete) Page + cleaner: { + orderNumberInput: 'input[name="orderNumber"]', + materialGrid: 'table.material-grid tbody tr', + saveButton: 'button:has-text("保存")', + }, + + // Common Elements + common: { + successMessage: '.message.success', + errorMessage: '.message.error', + confirmDialog: '.confirm-dialog', + confirmButton: 'button:has-text("确定")', + cancelButton: 'button:has-text("取消")', + }, +}; \ No newline at end of file diff --git a/tests/unit/locators.test.ts b/tests/unit/locators.test.ts new file mode 100644 index 0000000..7cc2c24 --- /dev/null +++ b/tests/unit/locators.test.ts @@ -0,0 +1,26 @@ +import { describe, it, expect } from 'vitest'; +import { ERP_LOCATORS } from '../../src/main/services/erp/locators'; + +describe('ERP Locators', () => { + it('should have login page locators defined', () => { + expect(ERP_LOCATORS.login.usernameInput).toBeDefined(); + expect(ERP_LOCATORS.login.passwordInput).toBeDefined(); + expect(ERP_LOCATORS.login.submitButton).toBeDefined(); + }); + + it('should have main frame locator', () => { + expect(ERP_LOCATORS.main.mainIframe).toBeDefined(); + }); + + it('should have extractor page locators', () => { + expect(ERP_LOCATORS.extractor.orderNumberInput).toBeDefined(); + expect(ERP_LOCATORS.extractor.queryButton).toBeDefined(); + expect(ERP_LOCATORS.extractor.exportButton).toBeDefined(); + }); + + it('should have cleaner page locators', () => { + expect(ERP_LOCATORS.cleaner.orderNumberInput).toBeDefined(); + expect(ERP_LOCATORS.cleaner.materialGrid).toBeDefined(); + expect(ERP_LOCATORS.cleaner.saveButton).toBeDefined(); + }); +}); \ No newline at end of file