Click on all links matching a selector

MB. picture MB. · Jan 29, 2013 · Viewed 9.3k times · Source

I have a list of links that I have to simulate a click on using CasperJS. They all share the same class.

However using this.click('.click-me') only clicks on the first link.

What's the proper way of clicking on all the links? I'm thinking that maybe I should try to get the number of links via evaluate() and then use a for loop. But if I use evaluate() with the number of links I have to use messages to communicate back and that seems complicated.

Is there a better way?

Answer

Tyson Nero picture Tyson Nero · Feb 14, 2014

I ended up using the nth-child() selector to accomplish this. Here's how...

Page:

<ul id="links">
  <li><a href="#1">1</a></li>  
  <li><a href="#2">2</a></li>  
  <li><a href="#3">3</a></li>  
</ul>

Script:

casper.then(function() {
  var i = 1;
  this.repeat(3, function() {
    this.click('#links li:nth-child(' + i + ') a');
    i++;
  });
});

You obviously don't have to use repeat but any iteration technique should work.