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

CasperJS/PhantomJS Get nodes and click them

我正在尝试获取 DOMElement 并单击它们中的每一个。之后我想 运行 断言响应。

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 中为 null。但是 运行 在 chrome 浏览器中进行相同的测试我得到了所有节点,其中 none 为空。

CasperJS 建立在 PhantomJS 之上,具有相同的限制。这些限制之一是有两个上下文,并且可以访问 DOM 的页面上下文被沙盒化。无法将非原始对象(例如 DOM 节点)传递到页面上下文之外。

Documentation:

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!

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

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

如果您想要单击 每个元素,那么根据元素在页面上的定位方式,有不同的方法可以实现。我的回答 展示了在页面上下文之外使用 CSS 选择器和 XPath 表达式的两种方式。

另请参阅: