Javascript PhantomJS传递参数进行求值
我有一个小的测试应用程序,它使用梦魇ejs作为PhantomJS的包装,我想测试元素上是否存在类。我有以下代码:Javascript PhantomJS传递参数进行求值,javascript,node.js,phantomjs,nightmare,Javascript,Node.js,Phantomjs,Nightmare,我有一个小的测试应用程序,它使用梦魇ejs作为PhantomJS的包装,我想测试元素上是否存在类。我有以下代码: new Nightmare() .goto(baseURL) .evaluate(function() { return document.querySelector('body'); }, function(element) { element.className.should.equal(expected) callback(); })
new Nightmare()
.goto(baseURL)
.evaluate(function() {
return document.querySelector('body');
}, function(element) {
element.className.should.equal(expected)
callback();
})
.run();
如何将参数传递给querySelector方法,而不是硬编码标记
我试过了
var tag = body;
new Nightmare()
.goto(baseURL)
.evaluate(function() {
return document.querySelector(tag);
}, function(element) {
element.className.should.equal(expected)
callback();
})
.run();
然而,PhantomJS总是返回一个错误,即它找不到变量
如何将变量参数传递给querySelector方法?PhantomJS有两个上下文。DOM上下文(或页面上下文)是沙盒式的,只能通过
evaluate()
访问evaluate()
接受在页面中计算的函数,因此内部代码不能引用在其外部定义的任何变量或函数
详情如下:
function evaluate(func, callback/**, arg1, arg2...*/)
这意味着附加值可以作为附加参数直接传递到函数中<代码>函数,回调
和arg1
,arg2
。。。通过(噩梦用来实际与PhantomJS接口)和func
,arg1
,arg2
。。。然后传递给
注意:参数和evaluate
函数的返回值必须是一个简单的原语对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了
闭包、函数、DOM节点等将无法工作强>
正确的用法是:
var tag = "body";
new Nightmare()
.goto(baseURL)
.evaluate(function(innertag) {
return document.querySelector(innertag).className;
}, function(className) {
className.should.equal(expected);
callback();
}, tag)
.run();