b64ec76998
Зависимости и навык spfx-qa для проверки портала в браузере (сценарии, снимки, проверка доступности). Каталоги сессии и отчётов (.auth/, .qa-reports/) — в .gitignore. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
28 lines
1.5 KiB
JavaScript
28 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
// Запускает ПОЛЬЗОВАТЕЛЬ (не агент). Открывает видимый браузер, вы логинитесь сами
|
|
// (пароль, MFA), затем нажимаете Enter в терминале — сессия сохраняется в файл.
|
|
// ВНИМАНИЕ: файл = доступ к вашей учётке M365. Не коммитьте, не пересылайте, удаляйте после тестов.
|
|
//
|
|
// node save-session.mjs https://<test-tenant>.sharepoint.com/sites/<qa-site> [.auth/tenant.json]
|
|
|
|
import { chromium } from 'playwright';
|
|
import readline from 'node:readline/promises';
|
|
import fs from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
|
|
const [url, file = '.auth/tenant.json'] = process.argv.slice(2);
|
|
if (!url) { console.error('Укажите URL тестового сайта'); process.exit(2); }
|
|
|
|
const browser = await chromium.launch({ headless: false });
|
|
const context = await browser.newContext();
|
|
await (await context.newPage()).goto(url);
|
|
|
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
await rl.question('Залогиньтесь в открытом окне, дождитесь загрузки сайта и нажмите Enter… ');
|
|
rl.close();
|
|
|
|
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
await context.storageState({ path: file });
|
|
await browser.close();
|
|
console.log(`Сессия сохранена в ${file}. Проверьте, что путь есть в .gitignore.`);
|