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.