PhantomJS 传递参数来评估
PhantomJS pass argument to evaluate
我有一个小型测试应用程序,它使用 NightmareJS 作为 PhantomJS 的包装器我想测试元素上是否存在 class。我有这个代码:
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 总是 returns 找不到变量的错误。
如何完成将变量参数传递给 querySelector 方法?
PhantomJS 有两个上下文。 DOM 上下文(或页面上下文)是沙盒化的,只能通过 evaluate()
访问。 evaluate()
采用在页面中计算的函数,因此内部代码不能引用在其外部定义的任何变量或函数。
signature of Nightmare's evaluate()
function如下:
function evaluate(func, callback/**, arg1, arg2...*/)
这意味着附加值可以作为附加参数直接传递给函数。 func
, callback
和 arg1
, arg2
, ... 通过 phantomjs-node (which is used by Nightmare to actually interface with PhantomJS) and func
, arg1
, arg2
, ... are then passed to PhantomJS's evaluate()
.
Note: The arguments and the return value to the evaluate
function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.
Closures, functions, DOM nodes, etc. will not work!
正确的用法是:
var tag = "body";
new Nightmare()
.goto(baseURL)
.evaluate(function(innertag) {
return document.querySelector(innertag).className;
}, function(className) {
className.should.equal(expected);
callback();
}, tag)
.run();
我有一个小型测试应用程序,它使用 NightmareJS 作为 PhantomJS 的包装器我想测试元素上是否存在 class。我有这个代码:
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 总是 returns 找不到变量的错误。
如何完成将变量参数传递给 querySelector 方法?
PhantomJS 有两个上下文。 DOM 上下文(或页面上下文)是沙盒化的,只能通过 evaluate()
访问。 evaluate()
采用在页面中计算的函数,因此内部代码不能引用在其外部定义的任何变量或函数。
signature of Nightmare's evaluate()
function如下:
function evaluate(func, callback/**, arg1, arg2...*/)
这意味着附加值可以作为附加参数直接传递给函数。 func
, callback
和 arg1
, arg2
, ... 通过 phantomjs-node (which is used by Nightmare to actually interface with PhantomJS) and func
, arg1
, arg2
, ... are then passed to PhantomJS's evaluate()
.
Note: The arguments and the return value to the
evaluate
function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.Closures, functions, DOM nodes, etc. will not work!
正确的用法是:
var tag = "body";
new Nightmare()
.goto(baseURL)
.evaluate(function(innertag) {
return document.querySelector(innertag).className;
}, function(className) {
className.should.equal(expected);
callback();
}, tag)
.run();