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

Clicking a different button inside each loop iteration

本文关键字:按钮 单击 循环 迭代      更新时间:2023-09-26

我在每个循环中点击一个项目时遇到了麻烦(在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)

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')]"));