11

Have used python selenium script to trigger selenium server to run JavaScript code. It works fine.

drv.execute_script('<some js code>')

However, I can't figure out how to run javascript code on an element that was retrieved using get_element_by_*() api. For example, I

ele = get_element_by_xpath('//button[@id="xyzw"]');
#question: how do I change the "style" attribute of the button element?

If I were on developer console of the browser, I can run it as

ele = $x('//button[@id="xyzw"]')[0]
ele.setAttribute("style", "color: yellow; border: 2px solid yellow;")

Just don't know how to do it in python selenium script. Thanks in advance.

3
  • Take a look at the JavascriptExecutor interface in Selenium. Commented Aug 18, 2014 at 17:28
  • Thanks @Brian for the link. It's for java binding, nevertheless, it makes me understand what the "arguments" in the working solution "...arguments[0].setAttribute(....)" means. It's used by javascript to refer to the function parameter (esp when the number of parameters to the function is variable). Commented Aug 18, 2014 at 17:38
  • No problem at all. I love sharing knowledge. Commented Aug 18, 2014 at 17:39

2 Answers 2

17

execute_script accepts arguments, so you can pass the element:

drv.execute_script('arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;")', ele)
Sign up to request clarification or add additional context in comments.

3 Comments

thanks for the quick reply. I tried drv.execute_script(arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;"), ele); but got error: name 'arguments' is not defined. Any idea why?
Turned out I missed the single quote, the following works fine: drv.execute_script('arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;")', ele) Hi @Richard, can you update your answer again so I can accept it?
@codingFun I kind of feel I only got you part of the way there, you're the one who took my syntactically wrong answer, and figured out the correct syntax. Having said that, if you're still willing to accept my answer, that's fine.
1

Thanks to the answer by @Richard who led me in the right direction and Brian's link (even thought it's for java) who helped me to figure out the meaning of "arguments".

The following code will do what I need.

ele = get_element_by_xpath('//button[@id="xyzw"]');
drv.execute_script('arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;")', ele)

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.