SeleniumでのJavaScriptコードの戻り値の取得


102

Webサイトの自動テストにSelenium2を使用しています。JavaScriptコードの戻り値を取得できるようにしたいと考えています。私が持っている場合はfoobar()、私のWebページでのJavaScript関数を、私はそれを呼び出すと、私のPythonコードに戻り値を取得したい、私はそれを何をすべきかを呼び出すことができますか?

回答:


166

値を返すにはreturnexecute_script()メソッドに渡される文字列でJavaScriptキーワードを使用するだけです。たとえば、

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

変数がJavaScriptで定義されていない場合、戻り値はどうなりますか?それは例外をスローするのですか、それとも単に空の文字列ですか?
Alex

変数が定義されていない場合は、次を返しますNone
dbJones

7
それらのnewbsの簡単なメモreturn_value = wd.execute_script("return {foo: 'bar'}")は、プログラムで後で使用される戻り値を格納します。
ntk4 2016

1
ドキュメントは、指定欠けRetrunsを:注意を。ただし、使用例:サンプルでは、​​ドキュメントのタイトルを返すjsを配置しています。Retrunsを明示的に指定する方が良い:文書で
woodz

7

return var;varが返したい変数の最後に追加するだけで、次のコード例のように関数として記述されたコードを省略していなくても、値を返すことができます。

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

resultURLsこの場合の配列が含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.