在每个循环迭代中单击一个不同的按钮

时间:2015-09-02 20:48:21

标签: javascript css-selectors casperjs

我遇到麻烦点击每个循环中的项目(在CasperJS中)这里是代码的一小部分:

$("#id1",html).each(function( index ) {/*loop-start*/
    var job = {};/*init*/
    casperjs.click(".class2");
    boo.waitForSelector('selector3', function() {
        job.url = casperjs.getCurrentUrl();
        page.pagejobs.push(job);
        casperjs.back();

    casperjs.waitForSelector('selector4', function() {

    },function(){

    }, 6000);
  },function(){

  }, 10000);

});/*loop-end*/

基本上我点击一个按钮(casper.click(".class2")),这没问题。第一次它工作正常'因为它用选择器(.class2)单击第一个按钮但问题是有许多选择器具有与那个相同的类(它们是(#id1)的子)。

所以它类似于:

<div id="id1">
  <div class="anything">
     <a button class="class2"> </a>
  </div>
  <div class="anything">
      <a button class="class2"> </a>
  </div>
</div>

所以我认为casper.click(".class2")是我的问题。我需要一种方法来在each函数的每次迭代中选择当前按钮。请注意,我无法使用$(this)

1 个答案:

答案 0 :(得分:0)

CSS选择器提供:nth-child()伪类,您可以使用它来根据索引选择子元素。只有.anything个元素是#selector1goeshere的子元素时才会按预期工作。

您可以使用

casper.click("#id1 > :nth-child("+(index+1)+") > a.class2");

您也可以使用XPath表达式执行此操作,但不限制只有.anything个孩子的限制。例如:

var x = require("casper").selectXPath;
...
casper.click(x("//*[@id='id1']/*[contains(@class,'anything')]["+(index+1)+"]/a[contains(@class,'class2')]"));