2

私のソフトウェアは、私が行うテストスイートを実行するように設定されています:

$ make selenium-test

このようにすると、スイートは問題なく通過します。ただし、デスクトップに Firefox インスタンスが表示されるのは気が散ります。さらに、マウスを動かしたときに誤っていくつかのテストが失敗することがありました。そこで、Xnest または Xephyr で Firefox を実行して、他のアプリケーションとは切り離したいと考えています。私がすることは:

$ Xnest :1 &
$ DISPLAY=:1 make selenium-test

これを実行し、テスト スイートが Chrome を実行するように設定されている場合、何の問題もありません。ただし、Firefox でこれを行うと、次の問題が発生します。

  1. Firefox のメニューをクリックできません。これが必要なのは、テストが失敗した場合にブラウザーを開いたままにするように Selenium に指示することがあるためです。

  2. Firefox で何も入力できません。私のテストのいくつかは、テキストの入力またはテキストの選択を扱うため、これが必要です。

  3. Chrome で完全に動作する Selenium テスト スイートは、Firefox では失敗します。これについては、適切な説明がありません。

2 番目の点のため、Xnest または Xephyr で実行しようとすると、テスト スイートが失敗します。

Xnest と Xephyr に渡すことができるオプションを確認しましたが、役立つものは何もありませんでした。

関連するバージョンは次のとおりです。

  • Firefox 22 および 24。
  • セレン 2.35.0 および 2.37.2
  • Xnest および Xephyr 1.14.3
4

1 に答える 1

5

クリックできないメニューと謎のテスト失敗の解決策

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_ADDRESSFirefox でタイピングを機能させるために絶対に設定解除しなければならない唯一の変数ですが、入力メソッドに関連付けられている他の環境変数も設定解除することをお勧めします。たとえば、Chromeで役立ちます。Chrome は問題なく起動して実行されますが、入力する必要がある場合は、応答する前に入力方法を「なし」に切り替える必要があります。Chrome を起動する前にインプット メソッド変数の設定を解除すると、入力する前にインプット メソッドを切り替える必要がなくなります。

その他の可能性

Xnest または Xephyr を使用する以外に、気を散らしたり、テスト ブラウザーとの偶発的なやり取りを避けるために、次のこともできます。

ブラウザを画面外にマップするようにリクエストする

私はそれをテストしておらず、ブラウザーまたは Selenium に問題があるかどうかはわかりません。すでに実行されているインスタンスを検査したい場合は、次のようなものをwmctrl使用してブラウザを表示可能なスペースに戻すことができます。

別の仮想デスクトップを使用する

(別の画面に移動することは、別の名前で同じ戦略であると考えています。)

別の仮想デスクトップに移動し、そこでブラウザを起動して、プライマリ デスクトップに戻ります。手動で行ったり来たりしなければならないのは苦痛です。

それとも、ブラウザを別のデスクトップに自動的にマップできるものを持っているのでしょうか? テスト目的で起動したブラウザのインス​​タンスと、おそらくデスクトップで既に実行しているブラウザのインス​​タンスを区別する必要があります。や などのクライアント プロパティを使用して、これを行ったことがWM_NAMEありWM_CLASSます。不可能ではありませんが、これはすぐに複雑になる可能性があります。

追加のヒント

  • aewm や fvwm などの非常に最小限のウィンドウ マネージャーを使用すると、Chromedriver は Chrome の位置とサイズを判断できなくなります。解決策は、ウィンドウ マネージャーをまったく使用しない (ただし、Firefox のメニューは機能しません) か、より充実したマネージャーを使用することです。私はopenboxでうまくいきました。
于 2013-11-09T17:01:12.357 に答える