How do I click an element in PhantomJS?
page.evaluate(function() {
document.getElementById('idButtonSpan').click();
});
This gives me an error "undefined is not a function..."
If I instead
return document.getElementById('idButtonSpan');
and then print it,
then it prints [object object], so the element does exist.
The element acts as a button, but it's actually just a span element, not a submit input.
I was able to get this button click to work with Casper, but Casper had other limitations so I'm back to PhantomJS.
.click()
is not standard. You need to create an event and dispatch it:Double clicks are also possible with PhantomJS.
Recommended
This is adapted from the answer of stovroz and triggers a native
dblclick
including themousedown
,mouseup
andclick
events (two of each).Other ways
The following two ways only trigger the
dblclick
event, but not the other events that should precede it.Adapted from this answer of torazaburo:
Adapted from this answer of Jobins John:
Full test script
I never was able to directly click the element. Instead, I looked at the html to find what function was called with onclick, and then called that function.
Alternatively to @torazaburo's response, you could stub
HTMLElement.prototype.click
when running in PhantomJS. For example, we use PhantomJS + QUnit to run our tests and in ourqunit-config.js
we have something like this:The easiest way is using jQuery.
Document.querySelector(element).click() works when using Phantomjs 2.0