将参数传递给与 Playwright 的 evaluate 一起使用的内部箭头函数
Pass parameters to inner arrow function used with Playwright's evaluate
我现在正在使用 playwright,想写一个包含内部箭头函数的函数,类似于
async function setSearchDate(startDate='2021-12-07') {
....do something...
const startDateAttribute = await page.$(searchStartDate);
await startDateAttribute.evaluate(node => node.setAttribute('value', startDate));
但不知何故,内部箭头函数看不到 startDate 值。
我得到的错误是“elementHandle.evaluate: ReferenceError: startDate is not defined”。
如果我在箭头函数中硬编码 startDate 值,代码运行良好。
我如何传递该值?
await startDateAttribute.evaluate(function(node) { node.setAttribute('value', startDate) });
evaluate
在页面 中计算您的函数 ,而不是在代码的上下文中。您可以访问页面执行环境中存在的所有内容(例如 window
、document
等),但不能访问 您的 执行环境中存在的所有内容(例如 startDate
).那是因为在页面的上下文中,没有变量 startDate
(除非页面定义了自己的 window.startDate
...)。
要传递参数,您必须使用 ...args
- evaluate
接受额外的参数,这些参数全部传递给您的函数:
await startDateAttribute.evaluate(
(node, startDate) => node.setAttribute('value', startDate),
// ^^^^^^^^^ 2) extra argument(s) arrive here
//vvvvvvvvv 1) extra argument(s) getting passed in here
startDate
)
查看文档:Evaluating JavaScript (explaining this exact pitfall) and ElementHandle#evaluate
.
我现在正在使用 playwright,想写一个包含内部箭头函数的函数,类似于
async function setSearchDate(startDate='2021-12-07') {
....do something...
const startDateAttribute = await page.$(searchStartDate);
await startDateAttribute.evaluate(node => node.setAttribute('value', startDate));
但不知何故,内部箭头函数看不到 startDate 值。 我得到的错误是“elementHandle.evaluate: ReferenceError: startDate is not defined”。
如果我在箭头函数中硬编码 startDate 值,代码运行良好。 我如何传递该值?
await startDateAttribute.evaluate(function(node) { node.setAttribute('value', startDate) });
evaluate
在页面 中计算您的函数 ,而不是在代码的上下文中。您可以访问页面执行环境中存在的所有内容(例如 window
、document
等),但不能访问 您的 执行环境中存在的所有内容(例如 startDate
).那是因为在页面的上下文中,没有变量 startDate
(除非页面定义了自己的 window.startDate
...)。
要传递参数,您必须使用 ...args
- evaluate
接受额外的参数,这些参数全部传递给您的函数:
await startDateAttribute.evaluate(
(node, startDate) => node.setAttribute('value', startDate),
// ^^^^^^^^^ 2) extra argument(s) arrive here
//vvvvvvvvv 1) extra argument(s) getting passed in here
startDate
)
查看文档:Evaluating JavaScript (explaining this exact pitfall) and ElementHandle#evaluate
.