Автоматична генерація тестів для vseosvita.ua через AI + Playwright.
Вказуєш тему або джерело (URL / PDF / DOCX) — скрипт генерує питання і автоматично заповнює конструктор тестів на сайті.
Якщо ти вже знаєш — пропускай цей розділ.
Node.js — це середовище, яке дозволяє запускати JavaScript поза браузером: на твоєму комп'ютері, на сервері.
Думай про нього як про «двигун» — без нього .js файли просто не запустяться.
npm (Node Package Manager) — менеджер пакетів, який іде разом з Node.js.
Це як AppStore для бібліотек коду. Команда npm install читає файл package.json і завантажує всі залежності в папку node_modules/.
Твій код (src/)
└── використовує бібліотеки (playwright, axios, @anthropic-ai/sdk...)
└── npm install → завантажує їх у node_modules/
Основні команди npm:
| Команда | Що робить |
|---|---|
npm install |
Встановити всі залежності з package.json |
npm run <назва> |
Запустити скрипт, описаний у package.json → scripts |
npm install <пакет> |
Додати новий пакет |
npm test |
Запустити тести (скорочення від npm run test) |
package.json — серце проєкту. Містить назву, версію, список залежностей і скрипти запуску.
- Node.js v18+ — nodejs.org (обирай LTS версію)
- npm — встановлюється разом з Node.js автоматично
Перевірити версію:
node --version # v20.x.x або вище
npm --version # 10.x.x# 1. Клонувати репозиторій
git clone https://github.com/romkravets/autoTestScreen.git
cd autoTestScreen
# 2. Встановити залежності
# npm читає package.json і завантажує всі бібліотеки в node_modules/
npm install
# 3. Встановити браузер Chromium для Playwright
# Playwright керує реальним браузером — він потрібен для заповнення тестів
npx playwright install chromium
# 4. Налаштувати змінні середовища
cp .env.example .env
# Відкрий .env і встав хоча б один API ключ# ── Anthropic Claude (рекомендовано) ────────────────────────────────
ANTHROPIC_API_KEY=sk-ant-...
# ── Groq (безкоштовно: console.groq.com) ────────────────────────────
GROQ_API_KEY=gsk_...
# ── OpenRouter (є безкоштовні моделі: openrouter.ai) ────────────────
OPENROUTER_API_KEY=sk-or-...
# ── Локальні моделі (змінювати тільки якщо нестандартний порт) ──────
# OLLAMA_BASE_URL=http://localhost:11434/v1
# LMSTUDIO_BASE_URL=http://localhost:1234/v1
# ── Параметри за замовчуванням ───────────────────────────────────────
DEFAULT_MODEL=claude
DEFAULT_QUESTION_COUNT=22| Провайдер | Сайт | Примітка |
|---|---|---|
| Groq | console.groq.com → API Keys | Швидко, безкоштовно |
| OpenRouter | openrouter.ai → Keys | Моделі з суфіксом :free — безкоштовно |
| Ollama | ollama.com | Локально, ключ не потрібен: ollama pull llama3.2 |
| LM Studio | lmstudio.ai | Локально, запусти Local Server |
npm run start-uiВідкрий браузер: http://localhost:5173
Веб-інтерфейс дозволяє:
- Генерувати тести через форму
- Переглядати список збережених тестів
- Редагувати питання прямо в браузері і зберігати
- Імпортувати готовий JSON
- Відстежувати стан авторизації (сесія vseosvita.ua)
Якщо порт зайнятий:
PORT_UI=5200 npm run start-ui→ http://localhost:5200
Перед використанням команди create потрібно залогінитись на vseosvita.ua.
Через UI:
- Відкрий http://localhost:5173
- Натисни «Увійти» у лівому нижньому куті
- У модальному вікні натисни «Відкрити браузер»
- Залогінься через Google у вікні Chromium
- Натисни «Я залогінився — зберегти сесію»
Через термінал:
npm run login
# Відкриється браузер → залогінься → натисни Enter у терміналіСесія зберігається у sessions/vseosvita.json. Дійсна кілька тижнів/місяців.
UI показує вік сесії та попереджає коли треба перелогінитись (> 25 днів).
# З prompt (тема)
node src/index.js generate \
--prompt "Цикл for у Python: range, enumerate, zip" \
--title "Python: цикли" \
--count 22
# З URL джерела
node src/index.js generate \
--source "https://example.com/article" \
--title "Назва тесту"
# З PDF або DOCX
node src/index.js generate \
--source ./підручник.pdf \
--title "Фізика 9 клас"
# Безкоштовно через Groq
node src/index.js generate \
--prompt "Хімія: органічні сполуки" \
--title "Хімія" \
--model groqПитання збережуться у ./questions/дата_назва.json.
node src/index.js create \
--prompt "Бази даних: SQL, JOIN, індекси" \
--title "Бази даних" \
--model groq
node src/index.js create \
--source "https://example.com/material" \
--title "Назва тесту" \
--model claudenode src/index.js create \
--load-questions ./questions/2026-04-02_Назва.json \
--title "Назва тесту" \
--url "https://vseosvita.ua/test/designer?id=XXXXX"| Параметр | Команди | Опис | За замовч. |
|---|---|---|---|
-p, --prompt |
generate, create | Довільна тема | — |
-s, --source |
generate, create | URL, PDF або DOCX | — |
-t, --title |
generate, create | Назва тесту (обов'язково) | — |
-c, --count |
generate, create | Кількість питань | 22 |
-m, --model |
generate, create | Провайдер та модель | claude |
--save-questions |
generate, create | Зберегти у вказаний файл | автофайл |
--load-questions |
create | Завантажити питання з JSON | — |
--url |
create | URL існуючого тесту в редакторі | — |
--headless |
create | Браузер у фоні (без вікна) | false |
Одне з
--prompt,--sourceабо--load-questionsобов'язкове.
| Провайдер | --model |
Безкоштовно | Потрібен ключ |
|---|---|---|---|
| Anthropic Claude | claude |
платно | ANTHROPIC_API_KEY |
| Groq | groq |
так | GROQ_API_KEY |
| OpenRouter | openrouter |
є безкоштовні | OPENROUTER_API_KEY |
| Ollama (локально) | ollama |
так | не потрібен |
| LM Studio (локально) | lmstudio |
так | не потрібен |
| Кастомний ендпоінт | custom |
— | CUSTOM_API_KEY |
Формат: provider або provider:model-id
--model claude # Claude Sonnet 4.6 (за замовч.)
--model claude:claude-opus-4-6 # Claude Opus
--model groq # Llama 3.3 70B via Groq
--model groq:mixtral-8x7b-32768 # Mixtral via Groq
--model openrouter:google/gemma-3-27b-it:free # Gemma (безкоштовно)
--model ollama:mistral # Mistral локально
--model ollama:llama3.2 # Llama 3.2 локальноГенеруються автоматично у пропорції ~50 / 30 / 20:
| Тип | Опис |
|---|---|
single |
Одна правильна відповідь (4 варіанти) |
multiple |
Кілька правильних відповідей (5–6 варіантів) |
text |
Поле для вводу відповіді |
Проєкт покритий unit та integration тестами (Node.js built-in test runner):
npm test✔ API: GET/POST/PUT/DELETE /api/questions (15 тестів)
✔ detectSourceType (7 тестів)
✔ parseModelString (6 тестів)
✔ buildTypeDistribution (3 тести)
✔ buildPrompt (6 тестів)
✔ PROVIDERS (4 тести)
✔ randomDelay / humanWait (5 тестів)
tests 45 pass 45 fail 0
autoTestScreen/
├── src/
│ ├── index.js — CLI точка входу (login / generate / create)
│ ├── auth.js — збереження Google-сесії через Playwright
│ ├── extractor.js — парсинг URL / PDF / DOCX
│ ├── generator.js — генерація питань (мульти-провайдер AI)
│ ├── automator.js — Playwright автоматизація vseosvita.ua
│ └── utils.js — людиноподібні затримки для anti-bot
├── tests/
│ ├── utils.test.js
│ ├── generator.test.js
│ ├── extractor.test.js
│ └── api.test.js
├── public/
│ └── index.html — веб-інтерфейс (SPA)
├── questions/ — збережені JSON файли з питаннями
├── sessions/ — сесія браузера (не комітити! є в .gitignore)
├── debug/ — скриншоти при помилках автоматизації
├── server.js — Express сервер для UI
├── package.json — залежності та скрипти
└── .env — API ключі (не комітити!)
sessions/і.envдодані до.gitignore— ніколи не комітити їх- Якщо сесія протухла — запусти логін знову
- При помилці автоматизації скриншот зберігається у
debug/ - Проєкт розрахований на локальний запуск (Playwright потребує ~1GB RAM)
