どなたか、JavaコードでSeleniumを使ってファイルをアップロードする方法を教えていただけませんか?
アプリケーションのボタンをクリックすると、新しいウィンドウが開き、アップロードファイルを選択することができます。Silverlight(C#)で開発されたブラウズボタンです。
まず、input要素がvisibleであることを確認する。
ディスカッションこちらでMark Collinが述べているとおりです:
ブラウズボタンをクリックすると、OSレベルのダイアログが表示されるので、クリックしないでください。 を、効果的に止めることができます。 となります; 代わりに使えるのが を使うことができます;
driver.findElement(By.id("myUploadElement")).sendKeys("<absolutePathToMyFile>");
)
myUploadElementはその要素(この場合はボタン)のidで、sendKeysにはアップロードしたいコンテンツ(画像、動画など)の絶対パスを指定する必要があります。残りはSeleniumがやってくれます。
アップロードは、ファイルを送信する要素が <input type="file">
という形式である場合のみ機能することに留意してください。
これは、アップロードウィンドウから画像をアップロードするために使用するものです。
//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);
完了しました。
ファイルパスを入力するテキストボックスがある場合は、sendkeyを使ってファイルパスを入力し、送信ボタンをクリックするだけです。 ファイルパスを入力するテキストボックスがなく、ブラウズボタンをクリックしてウィンドウのポップアップからファイルを選択することしかできない場合は、AutoItツールを使用することができます、
1.http://www.autoitscript.com/site/autoit/ からAutoitツールをダウンロードし、インストールします。
2.プログラムを開く -> Autoit tool -> 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からCompile and Buildを行います。
以下の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.
上記のロボットを使用しようとしました。 遅延を追加する必要があります:(。 また、フォーカスを失うため、デバッグしたり、他のことをしたりすることはできません:(。
//アップロードウィンドウを開きます。 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);
タグを type = "file"
として検索します。 これはセレンでサポートされているメインタグです。 XPathを、推奨されたときに同じでビルドできる場合。
-参照オプションがあるボタン(開くボタン)には、sendkeysを使用します。 ファイルを選択するためのウィンドウボックス)。 -ファイルをアップロードするボタンをクリックします。
以下のように:-。
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg"");
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click();
複数のファイルをアップロードする場合は、すべてのファイルをsendkeysで1つずつ置き、アップロードをクリックします。
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg"");
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"home.jpg");
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"tsquare.jpg");
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click(); // Upload button