現在OSXでSeleniumドライバーを起動すると、OSXで新しいFirefoxアイコンが開きます。また、現在のアプリケーションはフォーカスを失い、タイピングなどを中断します。
SeleniumにOSXでFirefoxを起動させて、Dockでフォーカスを取得したり、余分なアクションを引き起こしたりしないようにすることは可能ですか?
Firefoxを簡単に変更して、ドックに表示されないようにすることができます。
Finderで、Firefoxアプリのアイコンを右クリックし、[パッケージの内容を表示]を選択します。次に、Contentsフォルダーを開き、Info.plist
プロパティリストエディター(XCodeに付属)またはBBEdit/TextWranglerを使用して編集します。ファイルの先頭にLSUIElement
、値が。のキーを追加します<true/>
。BBEdit / TextWranglerでは、ファイルの先頭は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSUIElement</key>
<true/>
プロパティリストエディタで、任意のキーを右クリックして[未加工のキー/値を表示]を選択し、次に最上位のエントリ([情報プロパティリスト])を右クリックして[行の追加]を選択します。LSUIelement
この項目の値を指定し、チェックボックスをオンにします。
.plist
最近ではほとんどのファイルがバイナリ形式であり、これらのツールでバイナリを処理できるため、他のエディタの代わりにプロパティリストエディタまたはBBEdit/TextWranglerを使用することをお勧めします.plist
。他のテキストエディタは、ぎこちないものを表示するだけです。ただし、コマンドラインユーティリティInfo.plist
を使用してファイルをテキストに変換できることに注意してください。例:plutil
plutil -convert xml1 /Applications/Firefox.app/Contents/Info.plist
その後、好きなテキストエディタで編集できます。後でバイナリに戻す必要はありません。テキスト形式は実際には正常に機能します。
とにかく、info.plistファイルを保存し、Firefoxを閉じて再起動します。アイコン(およびメニューバー)が消えます。(いいえ、メニューバーを表示してアイコンを非表示にすることはできませんが、これでSeleniumが気になることはないと思います。)
2番目の質問に移ります。アプリケーションをフォーカスせずに起動することは技術的に可能です。たとえば、このApplescriptはFirefoxを起動し、ウィンドウのリストを取得しますが、activate
それを前面に表示するメッセージを送信しません。
tell application "Firefox" to get windows
任意のメッセージを送信できます。そのget windows
部分は、私たちの目的のために何もしないだけです。重要なのは、Firefoxを起動するには、Firefoxにメッセージを送信する必要があるということです(AppleScriptは、実行されていないアプリにメッセージを送信できないことを認識しているため、Firefoxをバックグラウンドで起動します)。
Seleniumがどのようにブラウザを起動するかはわかりませんが、osascript
コマンドラインツールなどを使用してFirefoxを起動するように変更し、上記のコマンドを使用することは可能かもしれません。
osascript -e 'tell application "Firefox" to get windows'
それらをまとめるのはあなたにお任せします...
問題は、Firefoxがフォーカスを持っていないときに常にイベントを正しく発生させるとは限らないという事実によるものです。これは、HTML5仕様の標準部分になり次第、修正される予定です。
virtualboxやVMWareFusionのような非常に軽量なVMを用意し、RemoteWebDriverを使用することをお勧めします。