2013-05-16 9 views
5

javaを使用してウェブサイトのセレンテストを作成しようとしています。しかし、ファイルのアップロードをテストするときに問題が発生しました。セレンを使用しているときにWindowsファイルのアップロードウィンドウを処理する方法

ファイルのアップロードボタンをクリックすると、自動的にWindowsファイルのアップロードが開きます。アップロードボックスにテキストを挿入するコードがあります。自動的にウィンドウボックスが表示されるのを防ぐために何もできません。また、Windowsファイルを自動的に開かないようにすることはできません。このテーマを研究して、私はセレンのwebdriverがこれを処理する方法がないことを理解しています。だから私の質問はこれです:私は単に自動化された方法でアップロードウィンドウを閉じることができますか?

私はJavaロボットクラスを試しましたが、動作しませんでした。

wait.until(ExpectedConditions.elementToBeClickable(By.id(("addResourcesButton")))); 
driver.findElement(By.id("addResourcesButton")).click(); 

//popup window comes up automatically at this point 


try { 
    Robot robot = new Robot(); 
    robot.mouseMove(875, 625); 
    robot.mousePress(InputEvent.BUTTON1_MASK); 
    robot.mouseRelease(InputEvent.BUTTON1_MASK); 
} catch (AWTException e) { 
    e.printStackTrace(); 
} 

//my attempt to move the mouse and click, doesn't move or click until after I close the windows upload box 

String fileToUpload = "C:\\file.png"; 


WebElement uploadElement = driver.findElement(By.id("fileInput")); 
uploadElement.sendKeys(fileToUpload); 

//Takes the code and successfully submits it to the text area, where I can now upload it 
+0

あなたはSelenium RCの、またはwebdriverをについて話しているの?前者には、['attachFile()'](http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#attachFile%28java.lang.String、 %20java.lang.String%29)メソッドを使用し、後者は['sendKeys()'](http://stackoverflow.com/a/10717319/1273080)を使用します(リンクには 'Robot'クラスの使用法に関するヒントもあります適切に使用されている場合は、常に動作します)。 –

+0

私は申し訳ありませんが、特にここではWebDriverについて話しています。ロボットクラスの問題は、ウィンドウのダイアログが閉じるまで待ってから、何かを実行するだけです。私はOSのアラートボックスに似た問題がありました。そこでロボットを動かすことができました。アップロードウィンドウが閉じられた後でなければ、実行されないようです。 – Zoltorn

+0

絶対にありません。あなたのコードを教えてください。私は確実に 'Robot'クラスを使ってファイルをアップロードすることができます。とにかく、より良い方法は、 ''要素に対して 'sendKeys()'メソッドを使うことです。それを試しましたか? –

答えて

5

あなたはこれらのいずれかを使用することにより、ノンブロッキングのクリックを行うことができます

The Advanced User Interactions APIJavaDocs

WebElement element = driver.findElement(By.whatever("anything")); 
new Actions(driver).click(element).perform(); 

またはJavaScript:

JavascriptExecutor js = (JavascriptExecutor)driver; 

WebElement element = driver.findElement(By.whatever("anything")); 
js.executeScript("arguments[0].click()", element); 
+0

最初の結果は私のために働いたが、後でActions.perform()を実行しなければならなかった。ありがとう! – Zoltorn

+0

@ user2246596はい、申し訳ありません、私はそれを忘れました。とにかく、私は助けることができてうれしいです! –

0

:アップロードウィンドウが(など、XY位置でクリックし、ALT-F4を)私はそれを与えたのいずれかのコマンドを実行する前に閉鎖されたまでは事前に

おかげ

EDIT待っていました私も同様の質問でこれに答えました。アップロードには他にもソリューションが用意されています - AutoITのように。しかし、私は個人的にはOS特有の対話と対話するように延期します。 OS固有の対話に対話すると、特定の環境からテストを実行することが制限されます。

Selenium webdriver java - upload file with phantomjs driver

常にアップロードは懸念しているとき、型の要素「ファイル」と対話&を識別します。これはあなたのポップアップ問題を解決します。

例:私のアプリケーションでは、関連する要素はDOMの下に持ってアップロードする - この場合は

<a id="uploadFileButtonLink" class="uploadFileButtonLink" href="javascript:void(0)" data-uidsfdc="3" style="display: none;">Upload a file</a> 
<input id="multiFileInput" class="multifile-upload-input-button" type="file" name="chatterFile_upload" multiple="multiple"/> 
<input id="multiUploadBtn" class="btnImportant" type="button" value="Upload Files"/> 

、あなたがタイプ「ファイル」である「multiFileInput」とのSendKeysメソッドを使用することができます。 この方法ですべてのFF、Chrome &もヘッドレスブラウザで動作します。

+0

私はアラートボックスを手に入れることができません。私がアップロードをヒットすると、新しいページが表示され、そこでテキストを入力できるテキストフィールドが表示されますが、これに加えてWindowsのアップロードボックスが起動します。私はそれをアップロードし、正しくファイルを送信することができます、私はちょうどそのポップアップウィンドウを取り除くために何をすべきか分かりません。今まで私は手動でキャンセルをしなければなりませんでした。 – Zoltorn

関連する問題