2

Selenium WebDriverをWeb自動化フレームワークとして使用しているときに、質問があります。ダウンロードしたファイルを特定の(デフォルトではない)フォルダーに保存し、追加の「ファイルの保存」ウィンドウを表示せずに、GoogleChromeとInternetExplorerを構成するにはどうすればよいですか。

WebdriverにはMozillaFirefoxブラウザ用のFirefoxProfileがありますが、他のブラウザはどうですか?

Firefoxの例:

        FirefoxProfile profile = new FirefoxProfile();

        profile.SetPreference("browser.helperApps.alwaysAsk.force", false);

        profile.SetPreference("browser.download.folderList", 2);

        profile.SetPreference("browser.download.dir", "\\Somedir\");

        profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);

        profile.SetPreference("browser.download.useDownloadDir", true);

        profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip, application/x-gzip");
4

2 に答える 2

1

Chrome ではそれが可能ですが、Firefox のプロファイル操作ほど簡単ではありません。

WebDriver バインディングは「カスタム」機能とコマンド ライン パラメータを追加する機能を公開しているため、Chrome が認識しているコマンド ライン スイッチのいずれかを指定できます。

http://peter.sh/experiments/chromium-command-line-switches/

これにより、Firefox の場合と同様に、Chrome にロードするプロファイルを与えることができます。

ただし、WebDriver バインディングはオプションと Firefox プロファイルを公開しません。したがって、手動で行う必要があります。

まず、プロファイルがどこにあるかを調べます。

Chrome でこの URL にアクセスします。

chrome://version/

現在ロードしているプロファイル (および使用しているコマンド スイッチ) がわかります。プロファイル パスをエクスプローラーにコピーして、そこに移動します。

デフォルトでは、Defaultプロファイル ディレクトリを使用する必要があります。User Dataエクスプローラーでレベルを上げて、フォルダーに座ってください。

次のステップでは、Selenium が使用する新しいプロファイルを作成します。Chrome を開き、[設定] > [ユーザー] > [新しいユーザーを追加] に移動します。名前を付けます。

Chrome が作成されると、そのユーザーに対して新しい Chrome ウィンドウが開きます。次のステップは、このユーザーに対してのみ、Chrome でダウンロードを特定の場所に保存するように強制することです。

これは、2 つの方法で行うことができます。Chrome UI で [設定] に移動し、ダウンロード ディレクトリを変更して、その横のチェックボックスがオフになっていることを確認するか、もう少しクリエイティブに...

すべての Chrome 設定はファイルに保存され、users ディレクトリに保存されます。User DataChrome のユーザー フォルダー内のフォルダーに、エクスプローラー ウィンドウが既に開いているはずです。うまくいけば、新しいプロファイル (おそらく と呼ばれるProfile 1) が作成されたことがわかります。それに入る。

ここで、 Preferences (拡張子なし)というファイルを探します。

メモ帳で編集します (JSON を使用したテキスト ドキュメントです)。

ダウンロード セクションを探します。次のようになります。

"download": {
    "directory_upgrade": true,
    "extensions_to_open": ""
},

ファイルを保存するパスを入力して、このキーを追加します。

"default_directory": "PATH",

Visual Studio デバッガーを使用する場合と同じ方法で、パス内のスラッシュを別のバックスラッシュでエスケープしてください。

たとえば、C:\Bob\Jim\Downloadsとして入力する必要がありますC:\\Bob\\Jim\\Downloads

このファイルを保存します。

これで、ダウンロードが特定の場所に移動するプロファイルが作成されました。Chrome でこのプロファイルを使用するにはどうすればよいですか? 起動時に開くプロファイルを指定します。コマンド ラインは次のようになります。

--profile-directory="Profile 1"

(それが呼ばれていない場合はProfile 1、フォルダー内で呼び出されているものに置き換えます)。User Data

Chrome に特定のプロファイルをロードするように指示することはできますが、Selenium にもこれを行うように指示するにはどうすればよいでしょうか? 簡単!「追加のコマンド ライン スイッチ」として追加します。

var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument(@"--profile-directory=""Profile 1""");

Selenium は、コマンド ライン スイッチが Chrome に確実に渡されるように注意を払います。

(注: 誰かがより簡単な解決策を知っている場合は、お知らせください!)。

IE については、IE8 と IE9 でテストしましたが、問題なく動作します。IE は、デフォルトのダウンロード場所のレジストリ キーを考慮することができます。ただし、IE7以下についてはコメントできません。

regeditを使用して次の場所に移動します(これはWindows ユーザー設定ごとです)。

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer

という文字列値を追加しますDownload Directory。そのは、ダウンロード先の正確な場所になります。ところで、パスをエスケープする必要はありません。

Windows でログインしているユーザーがこの値を設定していることを確認してください。これ以上の設定は必要ありません。

于 2013-01-03T11:25:54.237 に答える
0

クロムの場合は、以下のコードを試してください。私もIEの同様のオプションを探しています。

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
options.setExperimentalOptions("prefs", chromePrefs);
options.addArguments("--test-type");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);
于 2014-07-18T06:36:31.240 に答える