Abrufen des Rückgabewerts von Javascript-Code in Selen

102

Ich verwende Selenium2 für einige automatisierte Tests meiner Website und möchte den Rückgabewert eines Javascript-Codes erhalten können. foobar()Was kann ich aufrufen, wenn ich auf meiner Webseite eine Javascript-Funktion habe und diese aufrufen und den Rückgabewert in meinen Python-Code übernehmen möchte?

Eli Courtwright
quelle

Antworten:

166

Um einen Wert zurückzugeben, verwenden Sie einfach das returnJavaScript-Schlüsselwort in der an die execute_script()Methode übergebenen Zeichenfolge , z

>>> 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
quelle
Wenn die Variable nicht durch Javascript definiert ist, wie lautet der Rückgabewert? Wirft sie eine Ausnahme oder einfach eine leere Zeichenfolge aus?
Alex
Wenn die Variable nicht definiert ist, gibt sie zurückNone
dbJones
7
Ein kurzer Hinweis für diese Neulinge return_value = wd.execute_script("return {foo: 'bar'}")würde den zurückgegebenen Wert speichern, der später in Ihrem Programm verwendet werden soll.
Ntk4
1
Dem Dokument fehlt die Angabe eines Retruns: Hinweis. Obwohl in teir Usage: sample ein js eingefügt wird, das den Dokumenttitel zurückgibt. Besser Retruns explizit spezifizieren : in ihrem doc
woodz
7

Sie können Werte zurückgeben, auch wenn Ihr Code nicht als Funktion wie im folgenden Beispielcode geschrieben wurde, indem Sie einfach return var;am Ende hinzufügen, wo var die Variable ist, die Sie zurückgeben möchten.

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

resultenthält das Array, das in URLsdiesem Fall ist.

Eduard Florinescu
quelle