CasperJS: reference to a DOM element in click event instead of selector

Mandeep Singh

I have written a script to perform certain actions on a page using PhantomJS. Now I am trying to write the CasperJS script for the same.

The page I am using is this

I am trying to click on one of the sizes (34 in this case) and then Click on "Add to Bag" button.

Size 34 is supplied dynamically to the script. Here is how I am doing it in PhantomJS

var point = page.evaluate(function (sizeToSelect){
    var sizes = document.querySelectorAll('.size-desktop li.first.popover-options');
    var filter = Array.prototype.filter;
    var selected = filter.call(sizes, function(size){ return size.textContent == sizeToSelect });
    if(selected && selected.length){
        selected = selected[0].querySelector("span");
        return selected.getBoundingClientRect();
    } else {
        return  { "error": "size not available" }
    }
}, inputElements.size)


if (point) {
    page.sendEvent('click', (point.left + point.width / 2) , point.top + point.height / 2 );
}

I am able to find the exact DOM element to click by using a loop in this case. However, CasperJS documentation specifies that the click method expects a query Selector which can be a CSS selector or an XPATH selector. How can I achieve this in CasperJS?

Basically I am looking for XPATH selector or CSS selector for elements based on their content or maybe attributes in some cases.

Artjom B.

You can use the XPath helper utility to produce valid XPath objects that CasperJS understands:

var x = require('casper').selectXPath;

Your code should be functionally equivalent to this:

var sizeToSelect = "34";
casper.thenClick(x("//*[contains(@class,'size-desktop')]//"+
    "li[contains(@class,'first') and contains(@class,'popover-options')]/"+
    "span[contains(text(),'"+sizeToSelect+"')]/"+
    ".."));

Note that there is a /.. at the end in order to move to the parent of the <span> element which is an <a> element and the one you want to click.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

click() function is missing on DOM element in evaluate() in CasperJS

From Dev

Click on second element with CasperJS

From Dev

Handle DOM element click event in VueJS

From Dev

CasperJS Click on all links matching a selector

From Dev

CasperJS Click on all links matching a selector

From Dev

JQuery selector on click event

From Dev

Is it better to use a reference to a dom element inside a callback instead of retrieving it?

From Dev

Is it better to use a reference to a dom element inside a callback instead of retrieving it?

From Dev

Manually trigger click event on other DOM element in knockout viewmodel page

From Dev

click event is not triggered, when an element is inserted in the dom from a js variable

From Dev

dom element click event firing twice only in IE

From Dev

dynamically adding DOM element click event function not working in angularJs application

From Dev

how to activate click event in a dom element (Angular 2)

From Dev

One DOM element must be visible always on click event

From Dev

Quality of the DOM element screenshot using "captureSelector" in CasperJS

From Dev

click event on different child selector with same selector

From Dev

simulating click event of a different selector

From Dev

Bind click event to selector with knockout

From Dev

jQuery click event on :data selector

From Dev

simulating click event of a different selector

From Dev

Bind click event to selector with knockout

From Dev

Can't dispatch click on valid selector using CasperJS

From Dev

Can't dispatch click on valid selector using CasperJS

From Dev

How to echo the missing selector in a CasperJS onWaitTimeout event handler?

From Dev

Casperjs click() doesn't trigger click event correctly

From Dev

Casperjs click() doesn't trigger click event correctly

From Dev

Wicket.Ajax: Cannot bind a listener for event "click" on element "radioGroup1d" because the element is not in the DOM

From Dev

CasperJS can't find element using CSS selector or xPath

From Dev

CasperJS Cannot get informations from xpath selector element not found

Related Related

  1. 1

    click() function is missing on DOM element in evaluate() in CasperJS

  2. 2

    Click on second element with CasperJS

  3. 3

    Handle DOM element click event in VueJS

  4. 4

    CasperJS Click on all links matching a selector

  5. 5

    CasperJS Click on all links matching a selector

  6. 6

    JQuery selector on click event

  7. 7

    Is it better to use a reference to a dom element inside a callback instead of retrieving it?

  8. 8

    Is it better to use a reference to a dom element inside a callback instead of retrieving it?

  9. 9

    Manually trigger click event on other DOM element in knockout viewmodel page

  10. 10

    click event is not triggered, when an element is inserted in the dom from a js variable

  11. 11

    dom element click event firing twice only in IE

  12. 12

    dynamically adding DOM element click event function not working in angularJs application

  13. 13

    how to activate click event in a dom element (Angular 2)

  14. 14

    One DOM element must be visible always on click event

  15. 15

    Quality of the DOM element screenshot using "captureSelector" in CasperJS

  16. 16

    click event on different child selector with same selector

  17. 17

    simulating click event of a different selector

  18. 18

    Bind click event to selector with knockout

  19. 19

    jQuery click event on :data selector

  20. 20

    simulating click event of a different selector

  21. 21

    Bind click event to selector with knockout

  22. 22

    Can't dispatch click on valid selector using CasperJS

  23. 23

    Can't dispatch click on valid selector using CasperJS

  24. 24

    How to echo the missing selector in a CasperJS onWaitTimeout event handler?

  25. 25

    Casperjs click() doesn't trigger click event correctly

  26. 26

    Casperjs click() doesn't trigger click event correctly

  27. 27

    Wicket.Ajax: Cannot bind a listener for event "click" on element "radioGroup1d" because the element is not in the DOM

  28. 28

    CasperJS can't find element using CSS selector or xPath

  29. 29

    CasperJS Cannot get informations from xpath selector element not found

HotTag

Archive