【问题标题】:CasperJS/PhantomJS Get nodes and click themCasperJS/PhantomJS 获取节点并点击它们
【发布时间】:2015-11-03 00:58:48
【问题描述】:

我正在尝试获取 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 个匹配的节点,但 nodes[0] 是唯一不为空的节点。其余的在 CasperJS 中为空。但是在 chrome 浏览器中运行相同的测试我得到了所有节点,它们都不是空的。

【问题讨论】:

    标签: javascript phantomjs casperjs


    【解决方案1】:

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

    Documentation:

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

    闭包、函数、DOM 节点等将起作用!

    您无法将此与 Chrome 进行比较,因为 Chrome 在正常运行时没有两个上下文。

    您可以将 DOM 节点的 表示 传递到页面上下文之外。 CasperJS为此提供了一些便利功能,例如casper.getElementsInfo(selector)

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

    另见:

    【讨论】:

    • 感谢您的详尽回复。我会查看您提供的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多