4

我想计算具有“nice”类的 div 元素的数量。我有选择器div.nice,但不知道要使用哪个 casperjs 类/方法。

其实有一个tester.assertElementCount方法,但是有什么简单的返回元素个数的方法吗?

4

6 回答 6

5

只是

document.querySelectorAll("div.nice").length
于 2013-08-05T16:46:06.917 回答
4

如果您可以使用 jquery,它相当简单:

var count = $('div.classname').length;

发现一个SO Post似乎可以解释使用 jquery 和 casperjs,我没有使用 casperjs 的经验,所以在那里我帮不上什么忙。

于 2013-08-05T15:37:35.140 回答
3

CasperJS 1.1-beta3 的示例之一涉及检查 CasperJS 的 Google 搜索结果的数量。它引用__utils__.findAll(),它将选择器作为其参数。它允许您使用length任何 JS 对象可用的属性检查返回的项目数:

test.assertEval(function() {
  return __utils__.findAll("h3.r").length >= 10;
}, "google search for \"casperjs\" retrieves 10 or more results");

我从未尝试过,但似乎此实用程序函数可以在条件之外使用,并且它允许您在不使用 jQuery 的情况下报告元素的数量,正如先前的答案所推荐的那样。

于 2014-03-05T05:38:38.180 回答
3

Casper 提供了getElementsInfo,可以使用属性length来获取元素个数。例如

casper.getElementsInfo('myElement').length
于 2016-08-16T13:49:33.353 回答
0

您还可以使用assertElementCount来断言元素的计数

test.assertElementCount("div.nice", 1)
于 2014-07-15T05:32:08.523 回答
0

我没有发现上面的答案对我的事业有帮助。

我认为目标是计算元素的数量,而不必在页面上下文中评估 js 代码,这可能会令人沮丧加班并且有冲突的变量和函数。

相反,最好利用 casper 自动化上下文。这可以通过 ".exists()" 和 css 伪选择器 ":nth-of-type(i)" 的组合来完成

下面的代码就是这样做的……

var counter = 1;          //set to one, for css selector setup

casper.then(function() {  //wait your turn
    //loop through our element
    while(casper.exists( 'div span:nth-of-type(' + counter + ')' )) {
        counter++;        //count the results
    }
});

您可以将其设为一个函数并传入所有参数,或者只是将其复制并粘贴为一个步骤。

最好的部分,你可以在它后面加上一个重复语句,以获得一个非常酷的循环。

casper.then(function(){
    this.repeat(counter, function() {
        console.log("Another one - item #" + counter);
    });
});
于 2017-02-10T05:37:01.303 回答