クリックできないメニューと謎のテスト失敗の解決策
1 番目と 3 番目の問題は、Xnest または Xephyr インスタンスで Windows マネージャーを実行することで解決できます。たとえば、次のようになります。
$ DISPLAY=:1 openbox &
ウィンドウ マネージャーを実行しても、ブラウザーの非互換性に関係する問題は修正されないことに注意してください。ただし、ウィンドウ マネージャーがない場合、Firefox でブラウザー ウィンドウを切り替えるテストが失敗したことがあります。(これらのテストは、Chrome でまったく問題なく実行されました。)
タイピングの解決策
2 番目の問題は、Firefox が DBus と対話することが原因です。この簡単なスクリプト ( と呼びましょうstart-on-display
) は、修正方法を示しています。
#!/bin/sh
unset GTK_IM_MODULE
unset QT4_IM_MODULE
unset CLUTTER_IM_MODULE
unset XMODIFIERS
unset DBUS_SESSION_BUS_ADDRESS
display=$1
shift
export DISPLAY=$display
exec "$@"
このスクリプトは次のように使用できます。
$ start-on-display :1 firefox
またはテスト スイートを使用する場合:
$ start-on-display :1 make selenium-test
DBUS_SESSION_BUS_ADDRESS
Firefox でタイピングを機能させるために絶対に設定解除しなければならない唯一の変数ですが、入力メソッドに関連付けられている他の環境変数も設定解除することをお勧めします。たとえば、Chromeで役立ちます。Chrome は問題なく起動して実行されますが、入力する必要がある場合は、応答する前に入力方法を「なし」に切り替える必要があります。Chrome を起動する前にインプット メソッド変数の設定を解除すると、入力する前にインプット メソッドを切り替える必要がなくなります。
その他の可能性
Xnest または Xephyr を使用する以外に、気を散らしたり、テスト ブラウザーとの偶発的なやり取りを避けるために、次のこともできます。
ブラウザを画面外にマップするようにリクエストする
私はそれをテストしておらず、ブラウザーまたは Selenium に問題があるかどうかはわかりません。すでに実行されているインスタンスを検査したい場合は、次のようなものをwmctrl
使用してブラウザを表示可能なスペースに戻すことができます。
別の仮想デスクトップを使用する
(別の画面に移動することは、別の名前で同じ戦略であると考えています。)
別の仮想デスクトップに移動し、そこでブラウザを起動して、プライマリ デスクトップに戻ります。手動で行ったり来たりしなければならないのは苦痛です。
それとも、ブラウザを別のデスクトップに自動的にマップできるものを持っているのでしょうか? テスト目的で起動したブラウザのインスタンスと、おそらくデスクトップで既に実行しているブラウザのインスタンスを区別する必要があります。や などのクライアント プロパティを使用して、これを行ったことがWM_NAME
ありWM_CLASS
ます。不可能ではありませんが、これはすぐに複雑になる可能性があります。
追加のヒント
- aewm や fvwm などの非常に最小限のウィンドウ マネージャーを使用すると、Chromedriver は Chrome の位置とサイズを判断できなくなります。解決策は、ウィンドウ マネージャーをまったく使用しない (ただし、Firefox のメニューは機能しません) か、より充実したマネージャーを使用することです。私はopenboxでうまくいきました。