CasperJS / PhantomJS获取节点并单击它们

时间:2015-11-02 16:42:05

标签: javascript phantomjs casperjs

我正在尝试获取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浏览器中运行相同的测试我获得了所有节点,其中没有一个是空的。

1 个答案:

答案 0 :(得分:1)

CasperJS基于PhantomJS构建,具有相同的局限性。其中一个限制是有两个上下文,并且可以访问DOM的页面上下文是沙箱。不可能将非原始对象(如DOM节点)传递出页面上下文。

Documentation

  

注意: evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那就没关系了。

     

闭包,函数,DOM节点等将工作!

您无法与Chrome进行比较,因为Chrome在正常操作中没有两个上下文。

您可以将DOM节点的表示传递出页面上下文。 CasperJS有一些便利功能,如casper.getElementsInfo(selector)

如果您想点击每个元素,则有不同的方法可以实现这一点,具体取决于元素在页面上的位置。我的回答here显示了在页面上下文之外使用CSS选择器和XPath表达式的两种方法。

另见: