Obtener el valor de retorno del código Javascript en Selenium

102

Estoy usando Selenium2 para algunas pruebas automatizadas de mi sitio web y me gustaría poder obtener el valor de retorno de algún código Javascript. Si tengo una foobar()función de Javascript en mi página web y quiero llamarla y obtener el valor de retorno en mi código de Python, ¿a qué puedo llamar para hacer eso?

Eli Courtwright
fuente

Respuestas:

166

Para devolver un valor, simplemente use la returnpalabra clave JavaScript en la cadena pasada al execute_script()método, p. Ej.

>>> 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'
Eli Courtwright
fuente
Si la variable no está definida por JavaScript, ¿cuál sería el valor de retorno ?, ¿Lanza una excepción o simplemente una cadena vacía?
Alex
si la variable no está definida, regresaNone
dbJones
7
Nota rápida para esos nuevos, return_value = wd.execute_script("return {foo: 'bar'}")almacenaría el valor devuelto para usarlo más adelante en su programa.
ntk4
1
el documento carece de especificar un Retruns: note. Aunque en Usage: sample ponen un js que devuelve el título del documento. Es mejor especificar explícitamente Retruns: en su documento
woodz
7

Puede devolver valores incluso si no tiene su código recortado escrito como una función como en el código de ejemplo a continuación, simplemente agregando return var;al final donde var es la variable que desea devolver.

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

resultcontendrá la matriz que es en URLseste caso.

Eduard Florinescu
fuente