1 changed files with 171 additions and 0 deletions
@ -0,0 +1,171 @@ |
|||||
|
import { TEST_CONFIG, ROUTES, SELECTORS } from './config'; |
||||
|
|
||||
|
/** |
||||
|
* 测试场景: 导航和路由保护 |
||||
|
*/ |
||||
|
|
||||
|
export const navigationTests = { |
||||
|
name: '导航和路由保护测试', |
||||
|
|
||||
|
// Test 1: 侧边栏导航
|
||||
|
async testSidebarNavigation() { |
||||
|
console.log('🧪 Test: 侧边栏导航'); |
||||
|
|
||||
|
// 先登录
|
||||
|
await login(); |
||||
|
|
||||
|
// 测试首页导航
|
||||
|
await mcp__plugin_playwright_playwright__browser_click({ |
||||
|
element: '首页导航链接', |
||||
|
ref: 'dashboard-link-ref' |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
let snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
console.assert( |
||||
|
snapshot.includes('总用户数') || snapshot.includes('用户增长趋势'), |
||||
|
'应该导航到仪表板' |
||||
|
); |
||||
|
|
||||
|
// 测试用户管理导航
|
||||
|
await mcp__plugin_playwright_playwright__browser_click({ |
||||
|
element: '用户管理导航链接', |
||||
|
ref: 'users-link-ref' |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
console.assert( |
||||
|
snapshot.includes('用户列表'), |
||||
|
'应该导航到用户管理' |
||||
|
); |
||||
|
|
||||
|
// 测试设置导航
|
||||
|
await mcp__plugin_playwright_playwright__browser_click({ |
||||
|
element: '设置导航链接', |
||||
|
ref: 'settings-link-ref' |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
console.assert( |
||||
|
snapshot.includes('个人设置'), |
||||
|
'应该导航到设置页面' |
||||
|
); |
||||
|
|
||||
|
console.log('✅ 侧边栏导航测试通过'); |
||||
|
}, |
||||
|
|
||||
|
// Test 2: 未登录访问受保护路由
|
||||
|
async testProtectedRouteRedirect() { |
||||
|
console.log('🧪 Test: 未登录访问受保护路由'); |
||||
|
|
||||
|
// 清除 localStorage(模拟未登录)
|
||||
|
await mcp__plugin_playwright_playwright__browser_evaluate({ |
||||
|
function: () => { |
||||
|
localStorage.clear(); |
||||
|
return 'localStorage cleared'; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// 尝试直接访问仪表板
|
||||
|
await mcp__plugin_playwright_playwright__browser_navigate({ |
||||
|
url: `${TEST_CONFIG.baseURL}${ROUTES.dashboard}` |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
|
||||
|
// 应该被重定向到登录页
|
||||
|
console.assert( |
||||
|
snapshot.includes('管理面板登录') || snapshot.includes('登录'), |
||||
|
'未登录应该重定向到登录页' |
||||
|
); |
||||
|
|
||||
|
console.log('✅ 受保护路由重定向测试通过'); |
||||
|
}, |
||||
|
|
||||
|
// Test 3: 登出功能
|
||||
|
async testLogout() { |
||||
|
console.log('🧪 Test: 登出功能'); |
||||
|
|
||||
|
// 先登录
|
||||
|
await login(); |
||||
|
|
||||
|
// 点击登出按钮
|
||||
|
await mcp__plugin_playwright_playwright__browser_click({ |
||||
|
element: '退出登录按钮', |
||||
|
ref: 'logout-button-ref' |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
|
||||
|
// 应该被重定向到登录页
|
||||
|
console.assert( |
||||
|
snapshot.includes('管理面板登录'), |
||||
|
'登出后应该重定向到登录页' |
||||
|
); |
||||
|
|
||||
|
console.log('✅ 登出功能测试通过'); |
||||
|
}, |
||||
|
|
||||
|
// Test 4: 页面标题验证
|
||||
|
async testPageTitles() { |
||||
|
console.log('🧪 Test: 页面标题'); |
||||
|
|
||||
|
await login(); |
||||
|
|
||||
|
// 访问各个页面验证标题或主要内容
|
||||
|
const pages = [ |
||||
|
{ route: ROUTES.dashboard, expected: '总用户数' }, |
||||
|
{ route: ROUTES.users, expected: '用户列表' }, |
||||
|
{ route: ROUTES.settings, expected: '个人设置' }, |
||||
|
]; |
||||
|
|
||||
|
for (const page of pages) { |
||||
|
await mcp__plugin_playwright_playwright__browser_navigate({ |
||||
|
url: `${TEST_CONFIG.baseURL}${page.route}` |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); |
||||
|
console.assert( |
||||
|
snapshot.includes(page.expected), |
||||
|
`页面 ${page.route} 应该包含 "${page.expected}"` |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
console.log('✅ 页面标题验证通过'); |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
// 辅助函数:登录
|
||||
|
async function login() { |
||||
|
await mcp__plugin_playwright_playwright__browser_navigate({ |
||||
|
url: `${TEST_CONFIG.baseURL}${ROUTES.login}` |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); |
||||
|
|
||||
|
// 填写登录表单
|
||||
|
await mcp__plugin_playwright_playwright__browser_fill_form({ |
||||
|
fields: [ |
||||
|
{ name: '邮箱', type: 'textbox', ref: 'email-input', value: TEST_CONFIG.testUser.email }, |
||||
|
{ name: '密码', type: 'textbox', ref: 'password-input', value: TEST_CONFIG.testUser.password } |
||||
|
] |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_click({ |
||||
|
element: '登录按钮', |
||||
|
ref: 'login-button-ref' |
||||
|
}); |
||||
|
|
||||
|
await mcp__plugin_playwright_playwright__browser_wait_for({ time: 3 }); |
||||
|
} |
||||
Loading…
Reference in new issue