2011-04-07 8 views
79

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

Respuesta

132

Para devolver un valor, simplemente use la palabra clave de JavaScript return en la cadena que se pasó al método execute_script(), 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' 
+0

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

+0

si la variable no está definida, devuelve 'None' – dbJones

+3

nota rápida para esos newbs,' return_value = wd.execute_script ("return {foo: 'bar'}") 'almacenaría el valor devuelto para usarlo más adelante en su programa . – ntk4

0

Puede devolver valores, incluso si usted no tiene su cortó del código escrito como una función como en el código de ejemplo a continuación, con sólo añadir return var; en el extremo 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''') 

result contendrá la matriz que está en URLs este caso.

Cuestiones relacionadas