web-dev-qa-db-fra.com

Obtenir la valeur de retour du code Javascript dans Selenium

J'utilise Selenium2 pour certains tests automatisés de mon site Web et j'aimerais pouvoir obtenir la valeur de retour d'un code Javascript. Si j'ai une fonction foobar() Javascript dans ma page Web et que je souhaite l'appeler pour obtenir la valeur de retour dans mon code Python), comment puis-je appeler pour le faire?

94
Eli Courtwright

Pour renvoyer une valeur, utilisez simplement le mot clé return JavaScript dans la chaîne transmise à la méthode 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'
157
Eli Courtwright

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

result = driver.execute_script('''cells = document.querySelectorAll('a');
URLs = []
console.log(cells);
[].forEach.call(cells, function (el) {
    if(el.text.indexOf("download") !== -1){
    //el.click();
    console.log(el.href)
    //window.open(el.href, '_blank');
    URLs.Push(el.href)
    }
});
return URLs''')

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

4
Eduard Florinescu