feat: complete multi page feedback
This commit is contained in:
parent
de58fa6687
commit
6243ccb470
1 changed files with 33 additions and 21 deletions
54
script.js
54
script.js
|
|
@ -98,21 +98,22 @@
|
||||||
textarea.dispatchEvent(reactEvent);
|
textarea.dispatchEvent(reactEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleFeedbackForm(form) {
|
function isLastFeedbackPage(form) {
|
||||||
console.log('📝 Форма обратной связи...');
|
const counter = form.querySelector('.quiz__counter');
|
||||||
|
if (!counter) return true;
|
||||||
|
const parts = counter.textContent.split('—').map(s => s.trim());
|
||||||
|
return parts.length === 2 && parts[0] === parts[1];
|
||||||
|
}
|
||||||
|
|
||||||
// Проверяем, есть ли текстовое поле
|
async function handleFeedbackPage(form) {
|
||||||
const textarea = form.querySelector(FEEDBACK_TEXTAREA_SELECTOR);
|
const textarea = form.querySelector(FEEDBACK_TEXTAREA_SELECTOR);
|
||||||
if (textarea) {
|
if (textarea) {
|
||||||
// Симулируем ввод текста
|
|
||||||
simulateTyping(textarea, 'СПАСИБО!');
|
simulateTyping(textarea, 'СПАСИБО!');
|
||||||
console.log('✓ Введён текст "СПАСИБО!"');
|
console.log('✓ Введён текст "СПАСИБО!"');
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
|
|
||||||
// Пробуем ещё раз если кнопка всё ещё disabled
|
|
||||||
let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR);
|
let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR);
|
||||||
if (nextBtn && nextBtn.disabled) {
|
if (nextBtn && nextBtn.disabled) {
|
||||||
// Ещё один способ - через React fiber
|
|
||||||
const reactKey = Object.keys(textarea).find(key => key.startsWith('__reactFiber') || key.startsWith('__reactProps'));
|
const reactKey = Object.keys(textarea).find(key => key.startsWith('__reactFiber') || key.startsWith('__reactProps'));
|
||||||
if (reactKey) {
|
if (reactKey) {
|
||||||
const reactProps = textarea[reactKey];
|
const reactProps = textarea[reactKey];
|
||||||
|
|
@ -123,7 +124,6 @@
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Обрабатываем radio-кнопки
|
|
||||||
const radioGroups = form.querySelectorAll('.likert-scale__statement-row');
|
const radioGroups = form.querySelectorAll('.likert-scale__statement-row');
|
||||||
for (const row of radioGroups) {
|
for (const row of radioGroups) {
|
||||||
const firstRadio = row.querySelector('input[type="radio"]');
|
const firstRadio = row.querySelector('input[type="radio"]');
|
||||||
|
|
@ -137,7 +137,6 @@
|
||||||
|
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
|
|
||||||
// Ждём пока кнопка станет активной
|
|
||||||
let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR);
|
let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR);
|
||||||
let attempts = 0;
|
let attempts = 0;
|
||||||
while (nextBtn && nextBtn.disabled && attempts < 15) {
|
while (nextBtn && nextBtn.disabled && attempts < 15) {
|
||||||
|
|
@ -146,29 +145,42 @@
|
||||||
attempts++;
|
attempts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextBtn && !nextBtn.disabled) {
|
if (nextBtn && nextBtn.disabled) {
|
||||||
nextBtn.click();
|
|
||||||
console.log('✓ Нажата кнопка "Далее"');
|
|
||||||
handledFeedbacks.add(form);
|
|
||||||
await sleep(CLICK_DELAY);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Если кнопка всё ещё disabled, пробуем кликнуть принудительно
|
|
||||||
if (nextBtn) {
|
|
||||||
console.log('⚠️ Кнопка disabled, пробуем принудительный клик...');
|
console.log('⚠️ Кнопка disabled, пробуем принудительный клик...');
|
||||||
nextBtn.disabled = false;
|
nextBtn.disabled = false;
|
||||||
nextBtn.classList.remove('button2_disabled');
|
nextBtn.classList.remove('button2_disabled');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextBtn) {
|
||||||
nextBtn.click();
|
nextBtn.click();
|
||||||
handledFeedbacks.add(form);
|
console.log('✓ Нажата кнопка "Далее"');
|
||||||
await sleep(CLICK_DELAY);
|
await sleep(CLICK_DELAY);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
handledFeedbacks.add(form);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function handleFeedbackForm(form) {
|
||||||
|
console.log('📝 Форма обратной связи...');
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
const last = isLastFeedbackPage(form);
|
||||||
|
const counter = form.querySelector('.quiz__counter');
|
||||||
|
console.log(`📄 Страница: ${counter ? counter.textContent.trim() : '?'}`);
|
||||||
|
|
||||||
|
await handleFeedbackPage(form);
|
||||||
|
|
||||||
|
if (last) break;
|
||||||
|
|
||||||
|
// Ждём загрузки следующей страницы формы
|
||||||
|
await sleep(CLICK_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
handledFeedbacks.add(form);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
async function handleQuizForm(form) {
|
async function handleQuizForm(form) {
|
||||||
console.log('❓ Квиз...');
|
console.log('❓ Квиз...');
|
||||||
|
|
||||||
|
|
@ -495,7 +507,7 @@
|
||||||
if (found) {
|
if (found) {
|
||||||
await handleCourseModal();
|
await handleCourseModal();
|
||||||
}
|
}
|
||||||
} else if (window.location.pathname.includes('/trainer/')) {
|
} else if (window.location.pathname.includes('/trainer/') && window.monaco?.editor.getEditors().length > 0) {
|
||||||
await handleTrainerPage();
|
await handleTrainerPage();
|
||||||
} else {
|
} else {
|
||||||
run();
|
run();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue