在CasperJS中获取具有特定(数据)属性的每个元素

时间:2015-11-01 13:45:51

标签: javascript html casperjs custom-data-attribute

我尝试使用CasperJS测试页面。是否有可能获得包含属性数据-...的每个元素(段落)? 之后,我需要将此属性与内部HTML进行比较,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:6)

首先,您需要检索您感兴趣的所有元素的表示。可以使用casper.getElementsInfo(selector)完成此操作:

var elements = casper.getElementsInfo("p[data-whatever]");

这将为您提供页面上设置了<p>属性的所有data-whatever元素。如果您想根据data-whatever属性的值对其进行过滤,则需要根据需要使用attribute selectors

getElementsInfo()函数包含非常有用的信息,但不包含您要使用的实际元素。它只包含一个表示形式。

您可以迭代这些元素表示并对它们运行操作。你说你想&#34;将这个属性与内部HTML&#34; 进行比较。这可以通过这种方式完成:

elements.forEach(function(element){
    if (element.attributes["data-whatever"] === element.html) {
        casper.echo("data attribute and content are exactly equal");
    } else {
        casper.echo("data attribute and content are different");
    }
});

请记住,您可以使用普通的DOM函数直接对元素执行此操作,但是您必须在casper.evaluate()内执行此操作,因为PhantomJS(CasperJS构建于其上)具有两个上下文,页面上下文是沙箱。此外,您无法从page context返回DOM节点。