を使用してファイルをアップロードおよびダウンロードする方法 Selenium
⚡ スマートサマリー
ファイルのアップロードとダウンロード Selenium WebDriverワークフローは、入力フィールドにネイティブのsendKeys()、ダイアログにAutoItまたはRobot、CDPコマンドに依存しています。 Selenium 4. 自動化実行中に安全なダウンロードパスを設定する。
WebDriver でファイルをアップロードするには、ファイル選択入力フィールドで sendKeys() メソッドを使用してアップロードするファイルのパスを入力するだけです。このチュートリアルでは、WebDriver を使用してファイルのアップロードとダウンロードを処理する方法を学びます。 Selenium ウェブドライバー。
ファイルをアップロードする方法 Selenium
このセクションでは、 https://demo.guru99.com/test/upload/ テストアプリケーションとして。 このサイトでは、訪問者はサインアップせずにファイルを簡単にアップロードできます。

ファイル「C:\newhtml.html」をアップロードするとします。 WebDriver コードは以下のようになります。
import org.openqa.selenium.*;
import org.openqa.selenium.firefox です。Firefoxドライバ;
パブリッククラス PG9 {
パブリック静的空隙 主要(String[] args) {
System.setProperty(「webdriver.gecko.driver」,「C:\\geckodriver.exe」);
String baseUrl = 「https://demo.guru99.com/test/upload/」;
webdriver ドライバー = NEW Firefoxドライバ();
driver.get(baseUrl);
Web要素 uploadElement = driver.findElement(By.id(「uploadfile_0」));
// ファイル選択入力フィールドにファイルパスを入力してください
uploadElement.sendKeys(「C:\\newhtml.html」);
// 「利用規約に同意します」チェックボックスをオンにする
driver.findElement(By.id("条項"))。クリック();
// 「UploadFile」ボタンをクリックします
driver.findElement(By.name("送信"))。クリック();
}
}
このスクリプトを実行すると、ファイルを正常にアップロードできるようになり、次のようなメッセージが表示されるはずです。
WebDriverでファイルをアップロードする際には、以下の2点に注意してください。
- 「参照」ボタンのクリックをシミュレートする必要はありません。WebDriver はファイルパスをファイル選択テキストボックスに自動的に入力します。要素。
- ファイルパスを設定するときは Java IDE では、バックスラッシュに適切なエスケープ文字を使用します。
AutoIt を使用した非入力アップロードダイアログの処理
ページがネイティブのボタンではなくカスタムの参照ボタンを使用している場合要素の場合、sendKeys() は機能しません。その場合は、AutoIt スクリプトを呼び出すことができます。 Selenium OSのダイアログにファイルパスを入力してEnterキーを押してください。
以下のスクリプトを名前を付けて保存します アップロード.au3コンパイルして アップロード.exeそこから呼び出します Java 「参照」ボタンをクリックした後。
WinWaitActive("開いた")
送信(「C:\newhtml.html」)
送信("{入力}")
Java参照ボタンをクリックした後にヘルパーをトリガーします。
ランタイム.getRuntime().exec(「C:\\AutoIt\\upload.exe」);
java.awt.Robot クラスは純粋なJava AutoIt が利用できない場合の代替手段ですが、AutoIt の方が信頼性が高いです。 Windows タイトルによるダイアログを待機するためです。
ファイルをダウンロードする方法 Selenium ウェブドライバー
WebDriverにはダウンロードダイアログボックスにアクセスする機能がありません ダウンロード リンクまたはボタンをクリックすると、ブラウザによってダイアログ ボックスが表示されます。ただし、「wget」と呼ばれる別のプログラムを使用すると、これらのダイアログ ボックスをバイパスできます。
ウィゲットとは何ですか?
Wget は、ダウンロードを自動化するために使用される小さくて使いやすいコマンドライン プログラムです。。 基本的に、WebDriver スクリプトから Wget にアクセスしてダウンロード プロセスを実行します。
Wget のセットアップ
ステップ1) C ドライブに新しいフォルダーを作成し、「Wget」という名前を付けます。
wget.exeをダウンロード ここから そして、それを上記のステップで作成したWgetフォルダに配置します。
ステップ2) を押して実行を開く Windows キー + 「R」を押し、「cmd」と入力して「OK」をクリックします。
ルートディレクトリに移動するには、「cd /」と入力してください。
ステップ3) 指定された設定が正しく機能しているかどうかを確認するには、コマンドを入力してください。
Cドライブへの書き込みに問題があるようです。
ステップ4) コードを実行する前に、コマンドラインで wget のエラーをデバッグする必要があります。 Selenium WebDriver。これらのエラーは、 Eclipse エラーメッセージもあまり役に立たないでしょう。まずはコマンドラインを使ってwgetを動作させるのが最善です。コマンドラインで動作すれば、間違いなく Eclipse.
ステップ3で示したように、今回の例ではCドライブへの書き込みに問題が発生しています。ダウンロード先をDドライブに変更して、結果を確認してみましょう。
Messenger 正常にダウンロードされました。
先に進む前に、ダウンロードしたファイルを削除することを忘れないでください。
WebDriver と Wget の使用
次の例では、WebDriverとwgetを使用して、Yahooという人気のチャットソフトウェアをダウンロードします。 Messenger私たちの拠点 URL しなければならない https://demo.guru99.com/test/yahoo.html.
ステップ1) 後でステップ 4 で IOException をキャッチする必要があるため、「java.io.IOException」パッケージをインポートします。
ステップ2) getAttribute() 関数を使用してダウンロードリンクの「href」値を取得し、それを文字列変数として保存します。この例では、変数名を「sourceLocation」としました。
ステップ3) 以下のコマンドを使用して、wget の構文を設定します。
ステップ4) WebDriver コードから wget を呼び出して、ダウンロード プロセスを開始します。
まとめると、WebDriver コードは以下のようになります。
import java.io.IOException;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox です。Firefoxドライバ;
パブリッククラス PG8 {
パブリック静的空隙 主要(String[] args) {
System.setProperty(「webdriver.gecko.driver」,「C:\\geckodriver.exe」);
String baseUrl = 「https://demo.guru99.com/test/yahoo.html」;
webdriver ドライバー = NEW Firefoxドライバ();
driver.get(baseUrl);
Web要素 downloadButton = driver.findElement(By.id(「メッセンジャーのダウンロード」));
String sourceLocation = downloadButton.getAttribute(「href」);
String wget_command = 「cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate」 + ソースロケーション;
試します {
プロセス exec = Runtime.getRuntime().exec(wget_command);
int型 exitVal = exec.waitFor();
System.out.println(「出口価値:」 + exitVal);
} キャッチ (中断された例外 | IO例外 元) {
System.out.println(ex.toString());
}
driver.close();
}
}
このコードを実行した後、DドライブをチェックしてYahoo! Messenger インストーラーが正常にダウンロードされました。
カスタムダウンロードパスを設定する Selenium 4 CDP
Selenium 4ではChrome DevToolsプロトコルが公開され、サードパーティツールを使用せずにブラウザのダウンロード動作を制御できるようになりました。以下のコードスニペットでは、すべてのダウンロード先をカスタムフォルダに指定し、「名前を付けて保存」プロンプトをスキップすることで、テストで想定される場所にファイルを保存します。
地図<String,オブジェクト> パラメータ = NEW HashMap<>();
params.put("行動", "許可する");
params.put(「ダウンロードパス」, 「D:\\selenium-downloads」);
driver.executeCdpCommand(「Page.setDownloadBehavior」、パラメータ);
ドライバー.get(「https://demo.guru99.com/test/yahoo.html」);
driver.findElement(By.id(「メッセンジャーのダウンロード」))。クリック();
ダウンロードの検証は、対象ディレクトリをポーリングして期待されるファイル名を探し、そのサイズを確認することで行えます。これにより、外部スクリプトを使用せずにテストを確定的に実行できます。













