Ottenere il valore di ritorno del codice Javascript in Selenium


102

Sto usando Selenium2 per alcuni test automatici del mio sito web e mi piacerebbe essere in grado di ottenere il valore di ritorno di un codice Javascript. Se ho una foobar()funzione Javascript nella mia pagina web e voglio chiamarla e ottenere il valore di ritorno nel mio codice Python, cosa posso chiamare per farlo?

Risposte:


166

Per restituire un valore, utilizza semplicemente la returnparola chiave JavaScript nella stringa passata al execute_script()metodo, ad es

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

se la variabile non è definita da javascript, quale sarebbe il valore di ritorno? Genera un'eccezione o semplicemente una stringa vuota?
Alex

se la variabile non è definita, restituisceNone
dbJones

7
nota rapida per quei newbs, return_value = wd.execute_script("return {foo: 'bar'}")memorizzerebbe il valore restituito per essere utilizzato in seguito nel tuo programma.
ntk4

1
il documento manca di specificare un Retruns: note. Anche se in teir Usage: sample mettono un js che restituisce il titolo del documento. Meglio specificare esplicitamente Retruns: nel loro doc
woodz

7

Puoi restituire valori anche se non hai il frammento di codice scritto come una funzione come nel codice di esempio seguente, semplicemente aggiungendo return var;alla fine dove var è la variabile che vuoi restituire.

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

resultconterrà l'array che è in URLsquesto caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.