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 节点)传递到页面上下文之外。
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 表达式的两种方式。
另请参阅:
我正在尝试获取 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 节点)传递到页面上下文之外。
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)
.
如果您想要单击 每个元素,那么根据元素在页面上的定位方式,有不同的方法可以实现。我的回答
另请参阅: