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?

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'

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.