Iceweaselブラウザーを使用してRaspberry PiでSeleniumを実行しようとしたのは今回が初めてです。今晩簡単なテストをしてみました
# 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()
実行時に返されるエラーは次のとおりです。
=====================================================================
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"
私がオンラインで読んだことから理解できるように、IceweaselはpiのFirefoxの代替として機能し、多くの人がそれを使用するにはfirefox Webドライバーを呼び出すだけであると主張しています。私はこれを間違ってやっているだけですか?
お時間をいただきありがとうございます。
これは私にとってRaspberry Piヘッドレスで動作します:
インストール:
Sudo apt-get install python-pip iceweasel xvfb
Sudo pip install pyvirtualdisplay Selenium
コード:
from Selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Firefox()
なぜそうなのかはわかりませんが、ユーザーインタラクションシミュレーション(キーボード、マウスなど)に「ネイティブイベント」を使用しているFirefoxドライバーで発生しているエラーが原因です。
いくつかの技術的な詳細と、ネイティブイベントの背景/問題については、以下を参照してください。 https://code.google.com/p/Selenium/wiki/NativeEventsOnLinux
多くのSeleniumユーザー(私も含む)は、「ネイティブイベント」は多くの状況で問題があることに気づき、代わりに「合成イベント」を使用する方が簡単/安全です。合成されたイベントは、JavaScriptを介したユーザー操作をエミュレートします。
そのため、ドライバーで(プロファイルプロパティを設定して)ネイティブイベントを無効にしてみてください。そうすれば、そのエラーを回避できます。
例:
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.