// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
ねえ、それはどこかから来た私のものです:)。
Zamzar Webの場合、完全に機能するはずです。要素をクリックしません。パスを入力するだけです。具体的には、これで問題ありません。
driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");
Uploadify Webの場合、アップロードは noinput
であり、Flash オブジェクトであるため、困ったことになります。ブラウザー ダイアログ (または Flash オブジェクト) を操作できる WebDriver 用の API はありません。
そのため、Flash 要素をクリックすると、制御できないウィンドウがポップアップ表示されます。私が知っているブラウザーとオペレーティング システムでは、ウィンドウが開いた後、カーソルがFile name
入力にあるとほぼ想定できます。この仮定があなたの場合にも当てはまることを確認してください。
Alt + Nそうでない場合は、少なくとも Windows では、 を押してジャンプを試みることができます...
はいの場合は、Robot
クラスを使用してパスを「盲目的に」入力できます。あなたの場合、それは次のようなものになります:
driver.findElement(By.id("SWFUpload_0")).click();
Robot r = new Robot();
r.keyPress(KeyEvent.VK_C); // C
r.keyRelease(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_COLON); // : (colon)
r.keyRelease(KeyEvent.VK_COLON);
r.keyPress(KeyEvent.VK_SLASH); // / (slash)
r.keyRelease(KeyEvent.VK_SLASH);
// etc. for the whole file path
r.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end
r.keyRelease(KeyEvent.VK_ENTER);
それは悪いですが、うまくいくはずです。これらが必要になるかもしれないことに注意してください: How can I make Robot type a `:`? および文字列を KeyEvents に変換しますKeyEvent#getExtendedKeyCodeForChar()
(さらに、同様の作業を行う新しい光沢のあるものがありますが、JDK7 からのみ使用できます)。
Flash の場合、私が知っている唯一の代替手段 (このディスカッションから) は、ダーク テクニックを使用することです。
まず、Flash アプリケーションのソース コードを変更し、ActionScript の ExternalInterface API を使用して内部メソッドを公開します。公開されると、これらのメソッドはブラウザーで JavaScript によって呼び出すことができます。
次に、JavaScript が Flash アプリの内部メソッドを呼び出せるようになったので、WebDriver を使用して Web ページで JavaScript 呼び出しを行い、それが Flash アプリを呼び出します。
この手法については、flash-selenium プロジェクトのドキュメントで詳しく説明されています。( http://code.google.com/p/flash-selenium/ ) ですが、この手法の背後にある考え方は WebDriver にも当てはまります。