javascript - 未定义代表 querySelector 类的变量 Nightmare.js
问题描述
我不确定这是 Javascript 问题还是我没有正确使用 Nightmare.js。
我正在使用-.wait(className)
然后我评估innerHTML
. className
如果我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 => {
// ...
})
推荐阅读
- python - 使用 enumerate 计算一个值在 np 数组中的位置
- php - PHP session_start 返回 false,$_SESSION 变量不是持久的
- git - 为什么我的 git diff 在@@ 之后显示评论
- python - 在 django 中为用户创建公共配置文件
- python - 反向波兰符号算法不能与相同的操作数正确工作
- html - WKWebView 画布问题。画布内的链接没有做任何事情
- ruby-on-rails - 如何修复 RVM gemsets 中的 [missing bin/ruby] 列表
- python - 如何从 Win-R 窗口更改目录?
- php - PHP、Angular、HTACCESS - 只允许来自源域的请求
- swift - NavigationBarTitle 自动显示模式不起作用