web-dev-qa-db-ja.com

JavaでSelenium WebDriverを使用してファイルをアップロードする方法

JavaコードでSeleniumを使用してファイルをアップロードする方法を教えてもらえますか?

アプリケーションのボタンをクリックすると、アップロードウィンドウを選択するために使用できるものが新しいウィンドウで開きます。 Silverlight(C#)によって開発された参照ボタン。

59
Mahesh

まず、入力要素がvisibleであることを確認してください

マークコリンが議論の中で述べたように ここ

参照ボタンをクリックしないでください。OSレベルのダイアログボックスがトリガーされ、テストデッドが効果的に停止します。

代わりに使用できます:

driver.findElement(By.id("myUploadElement")).sendKeys("<absolutePathToMyFile>");

myUploadElementはその要素(この場合はボタン)のIDであり、sendKeysでは絶対パスを指定する必要がありますアップロードするコンテンツ(画像、ビデオなど)の。 Seleniumが残りを行います。

アップロードのみが機能することに注意してくださいファイルを送信する要素が<input type="file">の形式でなければならない場合

89
Kedar T
driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension");
11
Neopane

これは、アップロードウィンドウから画像をアップロードするために使用するものです。

    //open upload window
    upload.click();

    //put path to your image in a clipboard
    StringSelection ss = new StringSelection("C:\\IMG_3827.JPG");
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);

    //imitate mouse events like ENTER, CTRL+C, CTRL+V
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);

やった

10
Zheka

ファイルパスを入力するテキストボックスがある場合は、sendkeysを使用してファイルパスを入力し、送信ボタンをクリックします。ファイルパスを入力するテキストボックスがなく、参照ボタンをクリックしてWindowsポップアップからファイルを選択できる場合は、AutoItツールを使用できます。以下の手順を参照してAutoItを使用します。

  1. http://www.autoitscript.com/site/autoit/ からAutoitツールをダウンロードしてインストールします

  2. プログラム-> Autoitツール-> SciTE Script Editorを開きます。

  3. Autoitエディターに次のコードを貼り付けて、「filename.exe」として保存します(例:new.exe)

    次に、ファイルをコンパイルしてビルドし、exeにします。 (ツール→コンパイル)

Autoitコード:

WinWaitActive("File Upload"); Name of the file upload window (Windows Popup Name: File Upload)    
Send("logo.jpg"); File name    
Send("{ENTER}")

次に、Autoitツール-> SciTE Script Editorの[ツール]メニューからコンパイルおよびビルドします。

以下のJavaコードをEclipseエディターに貼り付けて保存します

Javaコード:

driver.findElement(By.id("uploadbutton")).click; // open the Upload window using Selenium    
Thread.sleep("20000"); // wait for page load    
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "C:\\Documents and Settings\\new.exe"); // Give  path where the exe is saved.
4
user3903359

私は上記のロボットを使用しようとしましたが、遅延を追加する必要があります:

//アップロードウィンドウを開くupload.click();

//put path to your image in a clipboard
StringSelection ss = new StringSelection(file.getAbsoluteFile());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);

//imitate mouse events like ENTER, CTRL+C, CTRL+V
Robot robot = new Robot();
robot.delay(250);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.delay(50);
robot.keyRelease(KeyEvent.VK_ENTER);
2
Ran Adler