1

そのため、Ubuntu Server VM で Selenium を実行していますが、小さな問題があります。VM を起動して Selenium テスト スクリプトを実行すると、次のエラーが表示されます: selenium.common.exceptions.WebDriverException: Message: '接続する前にブラウザが終了したようです' . Selenium テスト スクリプトを実行する前に、ターミナルでこのexport DISPLAY=:99を実行すると、すべて正常に動作します。すべてのテストはヘッドレスでうまく実行されます。

私の質問は、起動時にこのコマンドを実行する方法を知っている人はいますか? したがって、Selenium テスト スクリプトを実行する前に、ターミナルでこれを実行する必要はありません。/etc/rc.localファイルに追加してみました。しかし、これはうまくいかないようです。

また、Selenium テスト スクリプトの最初で実行してみました。これを追加するだけで(私はpythonを使用しています)

os.system("export DISPLAY=:99")

これを達成する方法について何か提案はありますか? 前もって感謝します

4

1 に答える 1

1

これはうまくいきません:

os.system("export DISPLAY=:99")

は新しいシェルを開始し、終了するとシェルが閉じるためsystem()、これは非常に短期間しか存続しない 1 つのプロセスの環境に影響を与えます。(子プロセスは親の環境に影響を与えることはできません。親は、子プロセスを実行する前に変更を加えた場合にのみ、子の環境に影響を与えることができます。)

を設定するには、いくつかの異なるメカニズムを選択できますDISPLAY

  • テストメカニズムを開始するスクリプトで設定します

    これは、システムが他のタスクを実行する可能性がある場合に特に便利です。これは、影響を最小限に抑えるためです。Python では、次のようになります。

    os.environ["DISPLAY"]=":99"
    

    ではbash(1)、次のようになります。

    export DISPLAY=:99
    
  • テストを実行するユーザー アカウントのログイン スクリプトで設定します。

    これは、テストを実行するユーザー アカウントがDISPLAY変数を必要としない場合に便利です。(ただし、ユーザーがssh -X testinguser@machine ...これを介してログインすると、通常のssh(1)X セッション転送が無効になります。)

    ~/.bashrcこれをユーザーのまたは~/.profileまたはに追加します~/.bash_profile。(bash(1)ファイル間の違いについては、 を参照してください。)

    export DISPLAY=:99
    
  • すべてのユーザーのログイン時に設定します。これは、システム上の複数のユーザー アカウントがテスト スクリプトを実行し、すべてのユーザー アカウントで機能するようにしたい場合に便利です。DISPLAYユーザーがfor X 転送を持っているかどうかは気にしません。

    編集/etc/environmentして新しい変数を追加します。PAM モジュールは、構成ディレクトリでpam_env(8)使用するように構成されているサービスの下で認証するすべてのユーザー アカウントの環境変数を設定します。(これは実際よりも複雑に聞こえます -- 一部のサービスでは、認証されたユーザーに環境変数を設定してもらいたいと考えていますが、一部のサービスではそうではありません。)pam_env(8)/etc/pam.d/

于 2011-12-09T01:47:46.880 に答える