我正在使用CasperJS构建一个概念验证测试,并且当事情可用时以及它们不可用时我试图将其包围起来。
我对evaluate()
为何需要以及为什么不能只获取页面并使用document.querySelectorAll()
进入城镇感到有点模糊,但最终会给我一个长度为零的nodeList ...即使在casper.echo
输出HTML并查看大量匹配的选择器之后。
现在,我正在尝试这个:
var tile;
var pid;
casper.waitForSelector('.m-product-tile', function() {
tile = this.evaluate(function() {
return __utils__.findOne('.m-product-tile');
});
pid = this.evaluate(function()
return __utils__.findOne('.m-product-tile').getAttribute('data-pid');
});
//do cools stuff like click() on tile and make sure the URL has the pid in it
});
但这感觉不对,因为我不确定__utils__.findOne()
将始终返回相同的元素。
我很乐意能够做到这一点:
pid = tile.getAttribute('data-pid');
但是当我尝试这个时,我得到一个错误:
uncaughtError: TypeError: 'undefined' is not a function (evaluating 'tile.getAttribute('data-pid')')
tile
以某种DOMNode
方法不再是getAttributes
吗?使用typeof tile
,它仍然认为它是一个对象。我回应了DOMNode,它有一个getAttributes
密钥。
第一个示例中的代码可以使用getAttribute
...那么为什么tile
会变成不再有getAttributes
方法的内容?
http://casperjs.readthedocs.org/en/latest/modules/casper.html#evaluate提供了一个非常好的答案......但是,我仍然想知道为什么,如果页面传回的是DOMNode
,为什么我不能对待它像一个人?