Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

romkravets/autoTestScreen

Repository files navigation

TestCraft — autoTestScreen

Автоматична генерація тестів для vseosvita.ua через AI + Playwright.
Вказуєш тему або джерело (URL / PDF / DOCX) — скрипт генерує питання і автоматично заповнює конструктор тестів на сайті.


Що таке Node.js і npm — коротко

Якщо ти вже знаєш — пропускай цей розділ.

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 ключ

Налаштування .env

# ── 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

Запуск UI (рекомендовано)

npm run start-ui

Відкрий браузер: http://localhost:5173

Веб-інтерфейс дозволяє:

  • Генерувати тести через форму
  • Переглядати список збережених тестів
  • Редагувати питання прямо в браузері і зберігати
  • Імпортувати готовий JSON
  • Відстежувати стан авторизації (сесія vseosvita.ua)

Якщо порт зайнятий: PORT_UI=5200 npm run start-uihttp://localhost:5200


Авторизація (один раз)

Перед використанням команди create потрібно залогінитись на vseosvita.ua.

Через UI:

  1. Відкрий http://localhost:5173
  2. Натисни «Увійти» у лівому нижньому куті
  3. У модальному вікні натисни «Відкрити браузер»
  4. Залогінься через Google у вікні Chromium
  5. Натисни «Я залогінився — зберегти сесію»

Через термінал:

npm run login
# Відкриється браузер → залогінься → натисни Enter у терміналі

Сесія зберігається у sessions/vseosvita.json. Дійсна кілька тижнів/місяців.
UI показує вік сесії та попереджає коли треба перелогінитись (> 25 днів).


CLI команди

Тільки генерація → JSON (без браузера)

# З 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 claude

Заповнити з готового JSON (без генерації)

node src/index.js create \
 --load-questions ./questions/2026-04-02_Назва.json \
 --title "Назва тесту" \
 --url "https://vseosvita.ua/test/designer?id=XXXXX"

Всі параметри CLI

Параметр Команди Опис За замовч.
-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 обов'язкове.


Провайдери AI

Провайдер --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)

AltStyle によって変換されたページ (->オリジナル) /