【问题标题】:Clicking a different button inside each loop iteration在每个循环迭代中单击不同的按钮
【发布时间】:2015-11-28 12:47:57
【问题描述】:

我在单击每个循环(在 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)

【问题讨论】:

标签: javascript css-selectors casperjs


【解决方案1】:

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

【讨论】:

  • ("+(index+1)+") 这个!是我需要的。我只是找不到办法。特维姆!
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多