wake-up-neo.com

Verwendung von Selen auf Raspberry Pi ohne Kopf

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. 

16
Lombax

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()
34
fivef

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.
0
Corey Goldberg