10

I was wondering what the differences are between calling the click() method of the WebElement versus finding the element by id and firing the click event with JavaScript.

Just to be clear in the first method I call the .click() of an instance of WebElement:

myWebElement.click();

The second technique is:

((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()");

I'm interested in knowing all the differences between these two techniques for clicking web elements, and also advantages and disadvantages of each.

2 Answers 2

11

Webdriver utilizes a browser's native support for mapping the DOM element to WebElement object using id/xpath etc.

The JavascriptExecutor.executeScript executes an external script in the context of the currently selected browser window. (similar to an augmented browsing tool like grease monkey, if you ever used), and in case the script returns any DOM element its converted into WebElement object.

One can also say, the click simulated by WebDriver on a browser is similar to what actual user do as compared to one invoked using javascript.

In reality, with WebDriver not all the events can be automated flawlessly with all the web browsers, in fact with different versions of the same Web browser also. (i.e. different version of IE, FF etc behave differently). Still WebDriver is the near best tool available for this.

Once (~4 years back) on a certain version of IE we observed that we can't send right click or may be hover mouse on generated menu links, so we used js to simulate that, which performed very much browser independent way. so you can now conclude what executing external javascript can be good for.

Also, there are automated web testing frameworks which use javascript for everything instead of browser's native support. e.g. :http://en.wikipedia.org/wiki/Sahi_%28software%29

Ref:

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks, let's go back to my example, and let's suppose that we have a button which is not enable (eg. with angular). I think that if I will use first technique (WebElement.click()) nothing will happen, while if I use the second it will bypass the fact that the button is disabled and it will trigger the click action, is that correct?
I doubt if you can ever click a button if its already disabled. remember Its still the same button in the same DOM
if you have firefox then load your page in it (with disabled button), and then go to tools->Web Developers->Scratchpad. This will open a small scratchpad window. copy your script in it document.getElementById('myElementID').click(). and then click Run button, then check for yourself what happens. :)
actually I could do that from the developer tools-> console both in chrome and firefox, yes you are right!
1

Those kind of tests are E2E (end to end) not BDD.

First one – is executed now, to take next action you must write some function that will delay execution for e.g download new data from server.

The second code return promisehttp://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html – „Schedules a command to click on this element.” – you can use then callback to run next action.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.