125 votes

Obtenir la valeur de retour d'un code Javascript dans Selenium

J'utilise Selenium2 pour des tests automatisés de mon site web, et j'aimerais pouvoir obtenir la valeur de retour d'un code Javascript. Si j'ai un foobar() Javascript dans ma page web et je veux l'appeler et obtenir la valeur de retour dans mon code Python, que puis-je appeler pour faire cela ?

204voto

Eli Courtwright Points 53071

Pour renvoyer une valeur, il suffit d'utiliser la fonction return dans la chaîne de caractères transmise à la fonction execute_script() par exemple.

>>> 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'

1 votes

Si la variable n'est pas définie par javascript, quelle serait la valeur de retour ? est-ce que cela lève une exception ou simplement une chaîne vide ?

0 votes

Si la variable n'est pas définie, il renvoie None

7 votes

Petite note pour les néophytes, return_value = wd.execute_script("return {foo: 'bar'}") stocke la valeur retournée pour l'utiliser plus tard dans votre programme.

20voto

Eduard Florinescu Points 1586

Vous pouvez renvoyer des valeurs même si votre bout de code n'est pas écrit comme une fonction, comme dans l'exemple de code ci-dessous, en ajoutant simplement return var; à la fin, où var est la variable que vous voulez renvoyer.

result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el) {
    URLs.push(el.href)
});
return URLs
''')

result contiendra le tableau qui se trouve dans URLs dans ce cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X