Ich habe zum ersten Mal versucht, Selenium auf einem Raspberry Pi mit dem Iceweasel-Browser auszuführen. Ich habe heute Abend einen einfachen Test durchgeführt
# Selenium test for /mod2
# verify: posts, and page name
class TestMod2Selenium(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_validate_page_elements(self):
driver = self.driver
driver.get("127.0.0.1:5000/mod2")
self.assertIn("Home - microblog", driver.title)
def tearDown(self):
self.driver.close()
der Fehler, den ich zur Laufzeit zurück bekomme, ist:
=====================================================================
ERROR: test_validate_page_elements (__main__.TestMod2Selenium)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 58, in setUp
self.driver = webdriver.Firefox()
File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/Selenium/webdriver/firefox/webdriver.py", line 59, in __init__
self.binary, timeout),
File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/Selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
self.binary.launch_browser(self.profile)
File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/Selenium/webdriver/firefox/firefox_binary.py", line 61, in launch_browser
self._wait_until_connectable()
File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/Selenium/webdriver/firefox/firefox_binary.py", line 100, in _wait_until_connectable
self._get_firefox_output())
WebDriverException: Message: "The browser appears to have exited before we could connect. The output was: ERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nError: no display specified\n"
Ich verstehe es aus dem, was ich online gelesen habe, dass Iceweasel als Firefox-Ersatz für das Pi fungiert, und viele haben behauptet, dass Sie nur den Firefox-Web-Treiber anrufen müssen, um ihn zu verwenden. Mache ich gerade das falsch?
Vielen Dank für Ihre Zeit.
Das funktioniert bei Raspberry Pi ohne Kopf:
Installation:
Sudo apt-get install python-pip iceweasel xvfb
Sudo pip install pyvirtualdisplay Selenium
Code:
from Selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Firefox()
Ich bin nicht sicher, warum es passiert, aber dieser Fehler hat mit dem Firefox-Treiber zu tun, der "native events" für die Simulation der Benutzerinteraktion (Tastatur, Maus usw.) verwendet.
Informationen zu technischen Details und Hintergrund/Problemen bei nativen Ereignissen finden Sie unter: https://code.google.com/p/Selenium/wiki/NativeEventsOnLinux
Viele Selenium-Benutzer (ich selbst eingeschlossen) finden, dass "native events" in vielen Situationen problematisch sind, und es ist einfach/sicherer, stattdessen "synthetisierte Events" zu verwenden. Synthetisierte Ereignisse emulieren die Benutzerinteraktion über JavaScript.
deaktivieren Sie also native Ereignisse (durch Festlegen der Profileigenschaft) in Ihrem Treiber, und Sie sollten diesen Fehler überwinden.
Beispiel:
from Selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.native_events_enabled = False
driver = webdriver.Firefox(profile)
# synthesized events are now enabled for this
# driver instance... native events are disabled.