函数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();
})();
答案 0 :(得分:4)
这是在Node.js中执行的任何库都常见的问题,并在浏览器中评估代码(Protractor,TestCafe,Nightmare等)。函数被字符串化并作为字符串传递给浏览器。 (input) => { console.log(value) }
的原始范围丢失,value
应该是全局的,未定义。
如the documentation所述,其他参数应该传递给$eval
。
应该是:
await page.$eval('.selector', (el, value) => { console.log(value) }, USERNAME);
console.log
可以正常工作但显然不会在Node控制台中显示任何内容,因为它引用了浏览器控制台。