表示 querySelector class 的变量未定义 Nightmare.js
Variable representing a class for querySelector is not defined Nightmare.js
我不确定这是 Javascript 问题还是我没有正确使用 Nightmare.js。
我正在使用 .wait(className)
- 然后我评估 className
的 innerHTML
。如果我手动添加 className
这会起作用。但是,如果我想动态添加 className
,则会出现以下错误:
ReferenceError: className is not defined
这发生在 .evaluate()
行。下面的代码示例:
for (const [className, childCount] of pageSections) {
it(`RENDERS THE ${className} SECTION CHILDREN`, async (done) => {
RenderHelper.visitPage('/') // Nightmare method from helper file
.wait(`${className}`) // This works, dynamically
.evaluate(() => document.querySelector(`${className}`).innerHTML)
// Above line is where the className is 'undefined'
.end()
.then((result) => {
RenderHelper.matchChildCount(result, childCount);
done();
})
.catch(done);
});
}
只是重复 - 如果我执行上述操作但我手动填充 className
,它工作正常。
我在这里错过了什么?
似乎 evaluate()
正在破坏使 className
的使用无效的执行上下文。要解决此问题,请遵循 evaluate()
方法说明中的指南并将 className
传递到回调中。
改变
.evaluate(() => document.querySelector(`${className}`).innerHTML)
到
.evaluate(className => return document.querySelector(className).innerHTML)
文档遵循此方法:https://github.com/segmentio/nightmare#evaluatefn-arg1-arg2
注意本例中 selector
的使用:
const selector = 'h1'
nightmare
.evaluate(selector => {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText
}, selector) // <-- that's how you pass parameters from Node scope to browser scope
.then(text => {
// ...
})
我不确定这是 Javascript 问题还是我没有正确使用 Nightmare.js。
我正在使用 .wait(className)
- 然后我评估 className
的 innerHTML
。如果我手动添加 className
这会起作用。但是,如果我想动态添加 className
,则会出现以下错误:
ReferenceError: className is not defined
这发生在 .evaluate()
行。下面的代码示例:
for (const [className, childCount] of pageSections) {
it(`RENDERS THE ${className} SECTION CHILDREN`, async (done) => {
RenderHelper.visitPage('/') // Nightmare method from helper file
.wait(`${className}`) // This works, dynamically
.evaluate(() => document.querySelector(`${className}`).innerHTML)
// Above line is where the className is 'undefined'
.end()
.then((result) => {
RenderHelper.matchChildCount(result, childCount);
done();
})
.catch(done);
});
}
只是重复 - 如果我执行上述操作但我手动填充 className
,它工作正常。
我在这里错过了什么?
似乎 evaluate()
正在破坏使 className
的使用无效的执行上下文。要解决此问题,请遵循 evaluate()
方法说明中的指南并将 className
传递到回调中。
改变
.evaluate(() => document.querySelector(`${className}`).innerHTML)
到
.evaluate(className => return document.querySelector(className).innerHTML)
文档遵循此方法:https://github.com/segmentio/nightmare#evaluatefn-arg1-arg2
注意本例中 selector
的使用:
const selector = 'h1'
nightmare
.evaluate(selector => {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText
}, selector) // <-- that's how you pass parameters from Node scope to browser scope
.then(text => {
// ...
})