javascript - Click on all 'a' elements in paragraph with specific class in CasperJS -


i have following problem. have structure of html code:

<p class="description">     lorem ipsum, bla bla bla      <a href="# onclick="somemethod(id)">click</a> </p> <p class="description">     lorem ipsum, bla bla bla </p> <p class="description">     lorem ipsum, bla bla bla      <a href="# onclick="somemethod(id)">click</a> </p> 

now need click via casperjs on every "a" in paragraphs class 'description'.

i try this:

while (selector = document.queryselector('p.description a')) {     casper.then(function () {         this.click(selector);         console.log('click');     }) } 

but doesn't work.

are there possibilities how this?

you have 2 problems.

  • you cannot use document , casper @ same time, because document available inside of page context (casper.evaluate()), casper not available in page context.
  • you need iterate on clickable elements either in page context or outside.

css selectors

if <p> elements have same parent , there no other elements in between, can use css selectors achieve this:

casper.then(function(){     var numberofelements = this.getelementsinfo("p.description").length;     for(var = 1; <= numberofelements; i++) {         this.click("p:nth-child("+i+") a");     } }); 

note it's not possible select :nth-child based on class, assumes no <p> elements there without "description" class.

xpath expressions

it's possible make more robust, using xpath expressions, because more expressive.

var x = require("casper").selectxpath; ... casper.then(function(){     var numberofelements = this.getelementsinfo("p.description").length;     for(var = 1; <= numberofelements; i++) {         this.click(x("(//p[contains(@class,'description')])["+i+"])/a"));     } }); 

where (//p[contains(@class,'description')])["+i+"]) means nodelist (//p[contains(@class,'description')]) of p elements built contain "description" part of "class" attribute. e.g. (nodelist)[3]) selects third element list.


if want iterate inside of page context, need use a click function inside of page context.


Comments

Popular posts from this blog

javascript - Slick Slider width recalculation -

jsf - PrimeFaces Datatable - What is f:facet actually doing? -

angular2 services - Angular 2 RC 4 Http post not firing -