export const SELECTORS = { LOGIN: { USERNAME_INPUT: 'input[placeholder="请输入用户名"]', PASSWORD_INPUT: 'input[placeholder="请输入密码"]', LOGIN_BUTTON: 'button[type="submit"]', REMEMBER_ME_CHECKBOX: 'input[type="checkbox"]', FORGOT_PASSWORD_LINK: 'text=忘记密码', REGISTER_LINK: 'text=注册账号', ERROR_MESSAGE: '.ant-message-error', SUCCESS_MESSAGE: '.ant-message-success', LOGIN_FORM: '.login-form' }, HEADER: { USER_MENU: '.user-menu', LOGOUT_BUTTON: 'text=退出登录', USER_INFO: '.user-info', NOTIFICATION: '.notification', SETTINGS: '.settings' }, MENU: { SIDEBAR: '.sidebar', MENU_ITEM: '.menu-item', SUBMENU: '.submenu', ACTIVE_MENU: '.menu-item.active', MENU_TOGGLE: '.menu-toggle' }, DASHBOARD: { STATISTICS_CARD: '.statistics-card', CHART: '.chart', TABLE: '.dashboard-table', FILTER: '.filter', SEARCH: '.search' }, TABLE: { CONTAINER: '.table-container', HEADER: 'thead', BODY: 'tbody', ROW: 'tr', CELL: 'td', CHECKBOX: 'input[type="checkbox"]', PAGINATION: '.pagination', SEARCH: '.table-search input', EXPORT: '.export-button', SORT: 'th.sortable' }, FORM: { CONTAINER: '.form-container', INPUT: 'input[type="text"], input[type="email"], input[type="password"], input[type="number"]', SELECT: 'select', CHECKBOX: 'input[type="checkbox"]', RADIO: 'input[type="radio"]', TEXTAREA: 'textarea', DATE_PICKER: 'input[type="date"]', TIME_PICKER: 'input[type="time"]', FILE_INPUT: 'input[type="file"]', SUBMIT_BUTTON: 'button[type="submit"], .submit-button', CANCEL_BUTTON: 'button[type="button"], .cancel-button', RESET_BUTTON: '.reset-button', ERROR_MESSAGE: '.error-message', VALIDATION_MESSAGE: '.validation-message' }, MODAL: { CONTAINER: '.modal, .ant-modal', TITLE: '.modal-title, .ant-modal-title', CONTENT: '.modal-content, .ant-modal-body', FOOTER: '.modal-footer, .ant-modal-footer', CLOSE_BUTTON: '.close-button, .ant-modal-close', CONFIRM_BUTTON: '.confirm-button, .ant-btn-primary', CANCEL_BUTTON: '.cancel-button, .ant-btn-default' }, TOAST: { SUCCESS: '.ant-message-success', ERROR: '.ant-message-error', WARNING: '.ant-message-warning', INFO: '.ant-message-info', LOADING: '.ant-message-loading' }, LOADING: { SPINNER: '.ant-spin, .loading-spinner', OVERLAY: '.loading-overlay', PROGRESS_BAR: '.progress-bar' }, NAVIGATION: { BREADCRUMB: '.breadcrumb', TABS: '.tabs', TAB_ITEM: '.tab-item', ACTIVE_TAB: '.tab-item.active', BACK_BUTTON: '.back-button', FORWARD_BUTTON: '.forward-button' }, USER_MANAGEMENT: { USER_LIST: '.user-list', USER_CARD: '.user-card', USER_AVATAR: '.user-avatar', USER_NAME: '.user-name', USER_EMAIL: '.user-email', USER_STATUS: '.user-status', USER_ROLE: '.user-role', ADD_USER_BUTTON: '.add-user-button', EDIT_USER_BUTTON: '.edit-user-button', DELETE_USER_BUTTON: '.delete-user-button', USER_SEARCH: '.user-search' }, ROLE_MANAGEMENT: { ROLE_LIST: '.role-list', ROLE_NAME: '.role-name', ROLE_DESCRIPTION: '.role-description', ROLE_PERMISSIONS: '.role-permissions', ADD_ROLE_BUTTON: '.add-role-button', EDIT_ROLE_BUTTON: '.edit-role-button', DELETE_ROLE_BUTTON: '.delete-role-button', PERMISSION_CHECKBOX: '.permission-checkbox' }, PERMISSION_MANAGEMENT: { PERMISSION_LIST: '.permission-list', PERMISSION_NAME: '.permission-name', PERMISSION_CODE: '.permission-code', PERMISSION_TYPE: '.permission-type', PERMISSION_RESOURCE: '.permission-resource', ADD_PERMISSION_BUTTON: '.add-permission-button', EDIT_PERMISSION_BUTTON: '.edit-permission-button', DELETE_PERMISSION_BUTTON: '.delete-permission-button' }, SETTINGS: { SETTINGS_PAGE: '.settings-page', SETTINGS_SECTION: '.settings-section', SETTINGS_ITEM: '.settings-item', SAVE_BUTTON: '.save-button', RESET_BUTTON: '.reset-button' } } as const; export const TIMEOUTS = { SHORT: 5000, MEDIUM: 10000, LONG: 30000, VERY_LONG: 60000, NETWORK_IDLE: 30000, ELEMENT_VISIBLE: 10000, ELEMENT_HIDDEN: 10000, NAVIGATION: 30000, PAGE_LOAD: 30000, API_REQUEST: 30000, ANIMATION: 1000 } as const; export const MESSAGES = { LOGIN: { SUCCESS: '登录成功', INVALID_CREDENTIALS: '用户名或密码错误', ACCOUNT_LOCKED: '账号已被锁定', ACCOUNT_DISABLED: '账号已被禁用', SESSION_EXPIRED: '会话已过期,请重新登录', NETWORK_ERROR: '网络错误,请稍后重试' }, LOGOUT: { SUCCESS: '退出登录成功', ERROR: '退出登录失败' }, VALIDATION: { REQUIRED: '此字段为必填项', INVALID_EMAIL: '邮箱格式不正确', INVALID_PHONE: '手机号格式不正确', INVALID_PASSWORD: '密码格式不正确', PASSWORD_MISMATCH: '两次输入的密码不一致', MIN_LENGTH: '输入长度不能少于 {min} 个字符', MAX_LENGTH: '输入长度不能超过 {max} 个字符', INVALID_NUMBER: '请输入有效的数字', INVALID_DATE: '日期格式不正确' }, OPERATION: { SUCCESS: '操作成功', FAILED: '操作失败', CONFIRM_DELETE: '确定要删除吗?', CONFIRM_SAVE: '确定要保存吗?', CONFIRM_CANCEL: '确定要取消吗?', UNSAVED_CHANGES: '您有未保存的更改,确定要离开吗?' }, NETWORK: { REQUEST_FAILED: '请求失败', TIMEOUT: '请求超时', SERVER_ERROR: '服务器错误', NETWORK_ERROR: '网络错误', UNAUTHORIZED: '未授权,请先登录', FORBIDDEN: '无权限访问', NOT_FOUND: '资源不存在' }, UPLOAD: { SUCCESS: '上传成功', FAILED: '上传失败', INVALID_FILE_TYPE: '文件类型不支持', FILE_TOO_LARGE: '文件大小超出限制', UPLOADING: '上传中...' }, DOWNLOAD: { SUCCESS: '下载成功', FAILED: '下载失败', PREPARING: '准备下载...' } } as const; export const ROLES = { ADMIN: 'admin', USER: 'user', GUEST: 'guest', SUPER_ADMIN: 'super_admin', MODERATOR: 'moderator' } as const; export const PERMISSIONS = { DASHBOARD: { VIEW: 'dashboard:view', EDIT: 'dashboard:edit', DELETE: 'dashboard:delete' }, USER: { VIEW: 'user:view', CREATE: 'user:create', EDIT: 'user:edit', DELETE: 'user:delete', EXPORT: 'user:export' }, ROLE: { VIEW: 'role:view', CREATE: 'role:create', EDIT: 'role:edit', DELETE: 'role:delete', ASSIGN_PERMISSIONS: 'role:assign_permissions' }, PERMISSION: { VIEW: 'permission:view', CREATE: 'permission:create', EDIT: 'permission:edit', DELETE: 'permission:delete' }, SETTINGS: { VIEW: 'settings:view', EDIT: 'settings:edit', SYSTEM: 'settings:system', PROFILE: 'settings:profile' } } as const; export const STATUS = { ACTIVE: 'active', INACTIVE: 'inactive', PENDING: 'pending', LOCKED: 'locked', DELETED: 'deleted', SUSPENDED: 'suspended' } as const; export const HTTP_STATUS = { OK: 200, CREATED: 201, NO_CONTENT: 204, BAD_REQUEST: 400, UNAUTHORIZED: 401, FORBIDDEN: 403, NOT_FOUND: 404, METHOD_NOT_ALLOWED: 405, CONFLICT: 409, UNPROCESSABLE_ENTITY: 422, INTERNAL_SERVER_ERROR: 500, NOT_IMPLEMENTED: 501, BAD_GATEWAY: 502, SERVICE_UNAVAILABLE: 503, GATEWAY_TIMEOUT: 504 } as const; export const TEST_DATA = { USERS: { ADMIN: { username: 'admin', password: 'Admin@123', email: 'admin@example.com', phone: '13800138000', realName: '管理员' }, USER: { username: 'testuser', password: 'User@123', email: 'user@example.com', phone: '13900139000', realName: '测试用户' }, INVALID: { username: 'invalid', password: 'invalid' } }, ROLES: { ADMIN: { name: '管理员', code: 'admin', description: '系统管理员角色' }, USER: { name: '普通用户', code: 'user', description: '普通用户角色' } }, PERMISSIONS: [ { name: '查看仪表盘', code: 'dashboard:view', type: 'menu', resource: '/dashboard' }, { name: '查看用户', code: 'user:view', type: 'menu', resource: '/user' }, { name: '创建用户', code: 'user:create', type: 'button', resource: '/user/create' }, { name: '编辑用户', code: 'user:edit', type: 'button', resource: '/user/edit' }, { name: '删除用户', code: 'user:delete', type: 'button', resource: '/user/delete' } ] } as const; export const API_ENDPOINTS = { AUTH: { LOGIN: '/sys/auth/login', LOGOUT: '/sys/auth/logout', REFRESH_TOKEN: '/sys/auth/refresh', GET_USER_INFO: '/sys/auth/userinfo' }, USER: { LIST: '/sys/user/list', DETAIL: '/sys/user/detail', CREATE: '/sys/user/create', UPDATE: '/sys/user/update', DELETE: '/sys/user/delete', EXPORT: '/sys/user/export' }, ROLE: { LIST: '/sys/role/list', DETAIL: '/sys/role/detail', CREATE: '/sys/role/create', UPDATE: '/sys/role/update', DELETE: '/sys/role/delete', ASSIGN_PERMISSIONS: '/sys/role/assign-permissions' }, PERMISSION: { LIST: '/sys/permission/list', DETAIL: '/sys/permission/detail', CREATE: '/sys/permission/create', UPDATE: '/sys/permission/update', DELETE: '/sys/permission/delete' }, MENU: { LIST: '/sys/menu/list', TREE: '/sys/menu/tree', CREATE: '/sys/menu/create', UPDATE: '/sys/menu/update', DELETE: '/sys/menu/delete' } } as const; export const ENVIRONMENTS = { LOCAL: { name: 'local', baseURL: 'http://localhost:5173', mockEnabled: true, mockMode: 'full' as const }, DEV: { name: 'dev', baseURL: 'https://dev.example.com', mockEnabled: false, mockMode: 'none' as const }, TEST: { name: 'test', baseURL: 'https://test.example.com', mockEnabled: true, mockMode: 'partial' as const }, PROD: { name: 'prod', baseURL: 'https://prod.example.com', mockEnabled: false, mockMode: 'none' as const } } as const; export const SCREENSHOT_CONFIG = { DIR: 'test-results/screenshots', ON_FAILURE: true, ON_SUCCESS: false, FULL_PAGE: false, RETRY_COUNT: 3 } as const; export const REPORT_CONFIG = { DIR: 'test-results/reports', JSON: true, HTML: true, ALLURE: true, INCLUDE_SCREENSHOTS: true, INCLUDE_LOGS: true, INCLUDE_VIDEO: true } as const; export const MOCK_CONFIG = { ENABLED: true, MODE: 'full' as const, DELAY: 0, LOG_CALLS: true, VALIDATE_RESPONSES: true, DATA_SOURCE: 'memory' as const } as const;