69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
import { type Page, expect } from '@playwright/test';
|
|
import { env } from 'node:process';
|
|
|
|
const DEFAULT_E2E_USER = 'testuser';
|
|
const DEFAULT_E2E_PASS = '12345678';
|
|
const mode=env.E2E_MODE;
|
|
|
|
export async function Login(page: Page) {
|
|
|
|
const isInstalled = env.E2E_SKIP_INSTALL === 'true';
|
|
|
|
let username: string | undefined;
|
|
let password: string | undefined;
|
|
let wasUsingDefault = false;
|
|
if(mode === 'url'){
|
|
const url1=env.DEVSTAR_URL;
|
|
if (isInstalled) {
|
|
// "已安装" 模式
|
|
|
|
username = env.E2E_USERNAME || DEFAULT_E2E_USER;
|
|
password = env.E2E_PASSWORD || DEFAULT_E2E_PASS;
|
|
if (!env.E2E_USERNAME) {
|
|
wasUsingDefault = true;
|
|
}
|
|
console.log(`"已安装"模式, 尝试用 ${username} 登录...`);
|
|
} else {
|
|
// "未安装" 模式
|
|
username = DEFAULT_E2E_USER;
|
|
password = DEFAULT_E2E_PASS;
|
|
wasUsingDefault=true;
|
|
console.log(` "刚安装"模式, 尝试用 ${username} 登录...`);
|
|
}
|
|
try {
|
|
await page.goto(url1 + '/user/login');
|
|
const captchaInput = page.locator('input[name="验证码"]');
|
|
if (await captchaInput.isVisible()) {
|
|
throw new Error('检测到验证码 (CAPTCHA)! E2E 测试无法继续。');
|
|
}
|
|
await page.fill('#user_name',username);
|
|
await page.fill('#password', password);
|
|
await page.getByRole('button', { name: '登录' }).click();
|
|
await expect(page).toHaveURL(url1+ '/');
|
|
console.log(`[LoginHelper] 用户 [${username}] 登录成功!`);;
|
|
} catch (error) {
|
|
console.error(`[LoginHelper] 登录失败! 原始错误: ${error.message}`);
|
|
|
|
let hint: string;
|
|
|
|
if (error.message.includes('CAPTCHA')) {
|
|
// 提示 1: 验证码
|
|
hint = `请禁用验证码!\n` ;
|
|
} else if (wasUsingDefault) {
|
|
// 提示 2: 你没输入, 且默认值失败了
|
|
hint = `1. 登录失败, 且你没有提供 README.md 里描述的环境变量。\n` +
|
|
`2. 脚本自动尝试了默认用户 (${DEFAULT_E2E_USER}),但失败了。\n` +
|
|
`3. 请检查默认用户 (${DEFAULT_E2E_USER}) 在该目标上是否存在, 且密码是否正确。`;
|
|
|
|
} else {
|
|
hint = `1. 登录失败, 你提供了 E2E_USERNAME (${username})。\n` +
|
|
`2. 请检查你传入的 E2E_USERNAME 和 E2E_PASSWORD 环境变量是否正确。`;
|
|
}
|
|
|
|
throw new Error(
|
|
`[LoginHelper] 登录失败。\n\n${hint}\n`
|
|
);
|
|
}
|
|
}
|
|
}
|