save-auth.ts
1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 半自动登录,登录存放auth.json
import { chromium } from '@playwright/test';
import dotenv from 'dotenv';
import path from 'path';
dotenv.config({ path: path.resolve(__dirname, '../.env') });
const TEST_PHONE = process.env.phone;
const TEST_USER_NAME = process.env.TEST_USER_NAME;
const BASE_URL = process.env.BASE_URL ;
if (!TEST_PHONE || !TEST_USER_NAME) {
throw new Error('phone 和 TEST_USER_NAME 环境变量未设置');
}
async function main() {
console.log('开始半自动登录...');
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
try {
await page.goto(`${BASE_URL}/#/pages/login/index`);
await page.waitForLoadState('domcontentloaded');
// 已登录则直接保存
try {
await page.getByText(TEST_USER_NAME!).waitFor({ state: 'visible', timeout: 3000 });
console.log('已登录,保存状态...');
await context.storageState({ path: 'auth.json' });
console.log('状态已保存到 auth.json');
return;
} catch {
console.log('未登录,开始登录...');
}
// 手机号登录流程
await page.getByText('手机号登录/注册').click();
await page.getByText('确定').click();
// 填写手机号
const phoneInput = page.locator('uni-input').filter({ hasText: '请输入手机号' }).locator('input').first();
await phoneInput.click();
await phoneInput.fill(TEST_PHONE!);
// 获取验证码
await page.getByText('获取验证码').click();
console.log('请手动输入验证码并点击登录...');
// 等待登录成功
await page.getByText(TEST_USER_NAME!).waitFor({ timeout: 120000 });
console.log('登录成功!');
await context.storageState({ path: 'auth.json' });
console.log('状态已保存到 auth.json');
} finally {
await browser.close();
}
}
main().catch(console.error);