Jas*_*ost 2 javascript node.js phantomjs nightmare
我有一个小的测试应用程序使用NightmareJS作为PhantomJS的包装我想测试元素是否存在类.我有这个代码:
new Nightmare()
.goto(baseURL)
.evaluate(function() {
return document.querySelector('body');
}, function(element) {
element.className.should.equal(expected)
callback();
})
.run();
Run Code Online (Sandbox Code Playgroud)
如何将参数传递给querySelector方法而不是对代码进行硬编码?
我试过了
var tag = body;
new Nightmare()
.goto(baseURL)
.evaluate(function() {
return document.querySelector(tag);
}, function(element) {
element.className.should.equal(expected)
callback();
})
.run();
Run Code Online (Sandbox Code Playgroud)
但是,PhantomJS始终返回一个无法找到变量的错误.
如何将变量参数传递给querySelector方法?
PhantomJS有两种情境.DOM上下文(或页面上下文)是沙箱,只能通过evaluate().evaluate()采用在页面中计算的函数,因此内部代码不能引用在其外部定义的任何变量或函数.
梦魇evaluate()功能的签名如下:
function evaluate(func, callback/**, arg1, arg2...*/)
Run Code Online (Sandbox Code Playgroud)
这意味着可以将其他值作为附加参数直接传递给函数.func,callback和arg1,arg2...被穿过phantomjs节点(其用于通过梦魇实际上与PhantomJS接口)以及func,arg1,arg2,...然后被传递到PhantomJS的evaluate().
注意:函数的参数和返回值
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |