我正在尝试获取DOMElements并单击其中的每一个。之后我想在响应上运行断言。
var nodes = this.evaluate(function(){
var nodes = document.querySelectorAll('.editable .action');
return nodes;
});
//Print the base URI for the node
for (i = 0; i < nodes.length; ++i) {
if(null != nodes[i]){
require('utils').dump(nodes[i].baseURI);
}
}
我有大约5个匹配的节点,但是节点[0]是唯一不为空的节点。其余在CasperJS中为空。然而,在chrome浏览器中运行相同的测试我获得了所有节点,其中没有一个是空的。
答案 0 :(得分:1)
CasperJS基于PhantomJS构建,具有相同的局限性。其中一个限制是有两个上下文,并且可以访问DOM的页面上下文是沙箱。不可能将非原始对象(如DOM节点)传递出页面上下文。
注意:
evaluate
函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那就没关系了。闭包,函数,DOM节点等将不工作!
您无法与Chrome进行比较,因为Chrome在正常操作中没有两个上下文。
您可以将DOM节点的表示传递出页面上下文。 CasperJS有一些便利功能,如casper.getElementsInfo(selector)
。
如果您想点击每个元素,则有不同的方法可以实现这一点,具体取决于元素在页面上的位置。我的回答here显示了在页面上下文之外使用CSS选择器和XPath表达式的两种方法。
另见: