*nux ボックスに Fabric からデプロイした後、いくつかのブラウザー自動化タスクを実行する目的で、Win2k8 EC2 インスタンスを実行しています。
Mac および Linux で動作する私のスクリプトは、cygwin Python を使用した cygwin で次のエラーを表示します。
File "/home/Myuser/.virtualenvs/myproject/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 141, in _get_firefox_start_cmd
" Please specify the firefox binary location or install firefox")
RuntimeError: Could not find firefox in your system PATH. Please specify the firefox binary location or install firefox
cygwin ( selenium )での Webdriver のサポートには、既知のバグ/関心の欠如があります。
仲間の SO ユーザーはより役に立ち、ここに解決策があります: https://stackoverflow.com/a/11104952/1668057
その方法は、Mac/* nix で私のコードを壊すようです。
それを実装し、コードの移植性を維持するにはどうすればよいですか?
(私の Selenium は PIP からインストールされるため、モジュール ファイルを編集するよりもメソッドをオーバーライドすることをお勧めします)
編集:
ジェフの答えに提案されたよりpythonicな方法を見て、私は次のことを思いつきました(私のスクリプトはすでに画像を無効にするためにFirefoxProfileクラスをサブクラス化/上書きしていることに注意してください):
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from subprocess import Popen, PIPE
class CygwinFirefoxProfile(FirefoxProfile):
@property
def path(self):
path = self.profile_dir
try:
proc = Popen(['cygpath','-d',path], stdout=PIPE, stderr=PIPE)
stdout, stderr = proc.communicate()
path = stdout.split('\n', 1)[0]
print("cygwin path found")
except OSError:
print("No cygwin path found")
return path
class CarServiceOnlineBookingsTest(unittest.TestCase):
def setUp(self):
firefoxProfile = CygwinFirefoxProfile()
## Disable CSS
firefoxProfile.set_preference('permissions.default.stylesheet', 2)
## Disable images
firefoxProfile.set_preference('permissions.default.image', 2)
## Disable Flash
firefoxProfile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
self.driver = webdriver.Firefox(firefoxProfile)
私の Mac では、これで例外がキャッチされ、通常どおり続行されますが、cygwin パスが検出される Win2k8 ボックスでは、次のエラーで失敗します。
Traceback (most recent call last):
File "myscript.py", line 45, in setUp
self.driver = webdriver.Firefox(firefoxProfile)
File "/home/Myuser/.virtualenvs/myenv/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 50, in __init__
self.binary = FirefoxBinary()
File "/home/Myuser/.virtualenvs/myenv/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 33, in __init__
self._start_cmd = self._get_firefox_start_cmd()
File "/home/Myuser/.virtualenvs/myenv/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 141, in _get_firefox_start_cmd
" Please specify the firefox binary location or install firefox")
RuntimeError: Could not find firefox in your system PATH. Please specify the firefox binary location or install firefox
私は Popen や、肯定的な結果のために返されると期待しているものにまったく精通していません。つまり、次のようなものを期待する必要がありC:\Program Files (x86)\Firefox\Firefox.exe
ますか?
次のデバッグステップはどこですか?
編集#2:
cygwin bash シェルから次のコマンドを実行すると、Firefox が開きます。
/cygdrive/c/Program\ Files\ \(x86\)/Mozilla\ Firefox/firefox.exe
私の次のステップは、これをスクリプトにハードコードして、Selenium がローカルで cygwin bash を介して、またはリモートで SSH を介して Firefox を起動できるかどうかを確認することだと思います...