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

Clicking a different button inside each loop iteration

我在点击 each 循环(在 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")) 没问题。第一次它工作正常,因为它点击了第一个带有 selector (.class2) 的按钮,但问题是有很多 selectors 具有相同的 class 比那个(它们是 (#id1) 的 children)。

所以它是这样的:

<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 函数的每次迭代中 select 当前按钮的方法。请注意,我不能使用 $(this)

CSS select 或提供 :nth-child() 伪 class,您可以将其用于 select 基于索引的子元素。当只有 .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')]"));