#puppeteer
#puppeteer
Вопрос:
Не запускается событие изменения даты при выборе даты в средстве выбора даты с помощью puppeteer.
Используя приведенный ниже код в тестовом js
await page.waitForSelector("#datepicker");
const datepicker=await page.$("#datepicker");
await page.$$eval("input#datepicker",e=>e.value="11/05/2020") ;
await page.$$eval("input#datepicker",e=>e.blur());
Значение изменяется в средстве выбора даты, но событие изменения даты не возникает, поэтому данные на этой основе не изменяются на странице.
Ниже найдено решение, которое работает в консоли, но не работает с Puppeteer.
const prevalue = await page.$$eval("input#datepicker", e => e[2].value);
await page.$$eval("input#datepicker", e => e[2].value = "24/10/2019");
await page.evaluate((preval) => $("input#datepicker")[2]._valueTracker.setValue(preval), prevalue)
const event = new Event('input', {
bubbles: true
});
await page.evaluate((eve) => $("input#datepicker")[1].dispatchEvent(eve), event);
Получение ошибки:
Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'
Комментарии:
1. Не используйте eval, используйте для этого функции мыши / ввода. В противном случае react не обновит состояние.
2. мышь / тип не работает. Ниже найдено решение, которое работает в консоли, но не работает с Puppeteer. const prevalue= await page.$$eval(«input#datepicker»,e=>e[2].значение) ; await page.$$eval(«input#datepicker»,e=> e[2].значение =»24/10/2019″) ; await page.eval((preval)=>$(«input#datepicker»)[2]._valueTracker.setValue(preval),prevalue) const событие = новое событие (‘input’, { bubbles: true }); ожидает страницу.evaluate((eve)=> $(«input#datepicker»)[1].dispatchEvent (eve), событие); Ошибка: не удалось выполнить ‘dispatchEvent’ для ‘EventTarget’: параметр 1 не имеет типа ‘Событие’
3. Не используйте комментарии для совместного использования такого большого куска кода.