รับค่าส่งคืนของโค้ด Javascript ในซีลีเนียม


104

ฉันใช้ Selenium2 สำหรับการทดสอบอัตโนมัติบางอย่างในเว็บไซต์ของฉันและฉันต้องการรับค่าส่งคืนของโค้ด Javascript บางส่วน หากฉันมีfoobar()ฟังก์ชัน Javascript ในหน้าเว็บของฉันและฉันต้องการเรียกสิ่งนั้นและรับค่าส่งคืนเป็นรหัส Python ของฉันฉันจะเรียกให้ทำอะไรได้บ้าง?

คำตอบ:


168

ในการส่งคืนค่าเพียงใช้returnคีย์เวิร์ด JavaScript ในสตริงที่ส่งไปยังexecute_script()เมธอดเช่น

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

1
docขาดการระบุRetruns:โน้ต แม้ว่าใน teir Usage:ตัวอย่างพวกเขาใส่ js ซึ่งส่งคืนชื่อเอกสาร ดีกว่าที่จะระบุRetrunsอย่างชัดเจน:ใน doc
woodz

8

คุณสามารถส่งคืนค่าได้แม้ว่าคุณจะไม่ได้เขียนโค้ดไว้เป็นฟังก์ชันเหมือนในโค้ดตัวอย่างด้านล่างเพียงแค่เพิ่มreturn var;ที่ส่วนท้ายโดยที่ var เป็นตัวแปรที่คุณต้องการส่งคืน

result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el) {
    URLs.push(el.href)
});
return URLs
''')

resultจะมีอาร์เรย์ที่อยู่ในURLsกรณีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.