Obtendo o valor de retorno do código Javascript no Selenium

102

Estou usando o Selenium2 para alguns testes automatizados do meu site e gostaria de poder obter o valor de retorno de algum código Javascript. Se eu tiver uma foobar()função Javascript em minha página da Web e quiser chamá-la e obter o valor de retorno em meu código Python, o que posso chamar para fazer isso?

Eli Courtwright
fonte

Respostas:

166

Para retornar um valor, basta usar a returnpalavra-chave JavaScript na string passada para o execute_script()método, por exemplo

>>> 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
fonte
se a variável não é definida por javascript, qual seria o valor de retorno? Ele lança uma exceção ou simplesmente uma string vazia?
Alex
se a variável não for definida, ela retornaráNone
dbJones
7
uma nota rápida para esses newbs, return_value = wd.execute_script("return {foo: 'bar'}")armazenaria o valor retornado para ser usado posteriormente em seu programa.
ntk4
1
o documento não especifica uma nota Retruns : . Embora em teir Usage: sample eles colocam um js que retorna o título do documento. Melhor especificar explicitamente Retruns: em seu documento
woodz
7

Você pode retornar valores mesmo se não tiver seu código cortado como uma função como no código de exemplo abaixo, apenas adicionando return var;no final, onde var é a variável que você deseja retornar.

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

resultirá conter a matriz que está URLsneste caso.

Eduard Florinescu
fonte