1

さまざまなバージョンの Windows Explorer で Selenium WebDriver 2.25 を使用してアプリケーションをテストしています。つまり、さまざまなマシンでテストを実行しています。

IE 8 を使用したアプリケーションのテストは問題なく動作しますが、IE7 を使用するワークステーションでテストを実行しようとすると奇妙なエラーが発生します。Java 6 がロードされた Windows XP Service Pack 2 を実行しています。IEDriverServer_Win32 実行可能ファイルを実行しようとすると、次のエラーが表示されます。

Failed to load the library from temp directory: C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp

私は何が欠けていますか?

4

4 に答える 4

2

IEDriverServer.exe は、.exe 内のリソースとして埋め込まれた IE ドライバーの実際のコードを含む .dll を持つ、小さくて単純な実行可能ファイルとして設計されています。この .dll を利用するには、実行可能ファイルが .dll をどこかに抽出して、Windows LoadLibraryAPI を呼び出して .dll のコードを読み込んで実行できるようにする必要があります。デフォルトでは、その抽出は一時ディレクトリに行われます。問題を調査するためのログ ファイルを生成しない場合、.dll が適切に抽出されていないか、抽出された後に への呼び出しがLoadLibrary失敗したと推測できます。

幸いなことに、IE ドライバーはこの問題の回避策を提供します。コマンド ライン引数として IEDriverServer.exe に渡す--extract-path="path\to\extract\dll\to"と、抽出に使用するディレクトリを明示的に指定できます。このコマンドライン引数をプログラムで渡す方法については、言語バインディングのドキュメントを参照してください。

たとえば、これを Java で機能させると、コードは次のようになります。

// WARNING: Entirely untested code below! Was written from memory without
// the benefit of an IDE. May not work correctly or even compile without
// modification.
// Assume "location" is a properly instantiated java.io.File containing
// the location of IEDriverServer.exe.
InternetExplorerDriverService service = new InternetExplorerDriverService.Builder()
    .withExtractPath(location)
    .build();
WebDriver driver = new InternetExplorerDriver(service);

もう 1 つの方法は、手動で IEDriverServer.exe を起動し、言語バインディングのRemoteWebDriverクラスを使用して接続することです。つまり、実行可能プロセスの存続期間はユーザーが責任を負うことになりますが、それはユーザーが探している動作を実現する方法になる可能性があります。

于 2013-07-19T20:40:10.210 に答える
0

実際、一時ディレクトリに抽出できないという同様の問題がありました.IEDriverがDLLを抽出するフォルダーに移動し、そのフォルダー内のSeleniumに関連するすべてを削除しました。

つまり、私にとっては C:\Users\usnm\AppData\Local\Temp で、webdriver_blahblah120398405.tmp のようなファイルがたくさんあり、同様の名前のフォルダーがたくさんありました。それらをすべて削除すると、プログラムが再び機能し始めました。したがって、C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp になります。

もちろん、私たちのエラーは少し異なります (私は Selenium 2.33 を使用しています)。私のエラーは「読み込みに失敗しました」ではなく「抽出に失敗しました」でした

于 2013-07-29T15:05:55.187 に答える