Getting the return value of Javascript code in Selenium
JavascriptPythonSeleniumSelenium WebdriverJavascript Problem Overview
I'm using Selenium2 for some automated tests of my website, and I'd like to be able to get the return value of some Javascript code. If I have a foobar()
Javascript function in my webpage and I want to call that and get the return value into my Python code, what can I call to do that?
Javascript Solutions
Solution 1 - Javascript
To return a value, simply use the return
JavaScript keyword in the string passed to the execute_script()
method, e.g.
>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/foo/bar")
>>> wd.execute_script("return 5")
5
>>> wd.execute_script("return true")
True
>>> wd.execute_script("return {foo: 'bar'}")
{u'foo': u'bar'}
>>> wd.execute_script("return foobar()")
u'eli'
Solution 2 - Javascript
You can return values even if you don't have your snippet of code written as a function like in the below example code, by just adding return var;
at the end where var is the variable you want to return.
result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el) {
URLs.push(el.href)
});
return URLs
''')
result
will contain the array that is in URLs
this case.