Передача thunk кукольнику $ .eval - PullRequest
0 голосов
/ 02 июня 2018

Функция setValue получает значение и возвращает функцию.Во второй функции я пытаюсь записать в лог значение value, но получаю

Error: Evaluation failed: ReferenceError: value is not defined

Мой код ниже.Его можно протестировать на try-puppeteer , просто скопируйте и вставьте мой код и удалите оператор require.

const puppeteer = require('puppeteer');

(async () => {
  const USERNAME = 'helloworld';
  const setValue = (value) => (input) => { console.log(value) };

  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('http://example.com');
  await page.$eval('.selector', setValue(USERNAME));

  await browser.close();
})();

1 Ответ

0 голосов
/ 02 июня 2018

Эта проблема характерна для любой библиотеки, которая выполняется в Node.js и оценивает код в браузере (Protractor, TestCafe, Nightmare и т. Д.).Функция является строковой и передается в браузер в виде строки.Исходная область действия (input) => { console.log(value) } потеряна, и ожидается, что value будет глобальным, что не определено.

Как указано в документации , дополнительные аргументы должны передаваться $eval.

Должно быть:

await page.$eval('.selector', (el, value) => { console.log(value) }, USERNAME);

console.log будет работать, но, очевидно, ничего не будет отображаться в консоли Node, поскольку это относится к консоли браузера.

...