2013-05-16 20 views
5

Java kullanarak bir web sitesi için selenyum testleri yazmaya çalışıyorum. Ancak, dosya yükleme sırasında bir sorunla karşılaştım ..Selenium kullanırken Windows dosya yükleme penceresi nasıl kullanılır

Dosya yükleme düğmesine tıkladığımda, otomatik olarak windows dosya yükleme işlemini açar. Yazıyı yükleme kutusuna başarıyla koyabilmek için kod çalışıyor, sadece pencerenin otomatik olarak açılmasını engellemek için yapabileceğim hiçbir şey yok ve web sitesinin otomatik olarak açılmasını istemiyorum, dosya yükleme gerçekten bir seçenek değil. Bu konuyu araştırmaktan, selenyum webdriver'ın bunu halletmesinin bir yolu olmadığını anlıyorum. Yani benim sorum şu: yükleme penceresini otomatik olarak kapatabileceğim bir yol nedir?

Java robot sınıfını denedim ve işe yaramadı.

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

bahsediyoruz ? İlki ['attachFile()'] (http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#attachFile%28java.lang.String, % 20java.lang.String% 29) metodu, ikincisi ['sendKeys()'] kullanır (http://stackoverflow.com/a/10717319/1273080) (linkin ayrıca Robot'un sınıf kullanımı ile ilgili bazı ipuçları da vardır) ki, eğer doğru kullanılırsa, her zaman çalışır). –

+0

Özür dilerim, özellikle burada WebDriver hakkında konuşuyorum. Robot sınıfı ile ilgili problem, pencerelerden birinin, anlattığım herhangi bir şeyi çalıştırmadan önce kapanmasını bekler. Bir işletim sistemi uyarı kutusu için benzer bir sorun vardı ve robotun orada çalışmasını sağlayabildim, yükleme penceresi kapatılıncaya kadar yayınlanmayacak olan yükleme penceresi için görünüyor. – Zoltorn

+0

Kesinlikle hayır. Bize kodunu gösterebilir misin? Dosya yüklemek için 'Robot' sınıfını güvenilir bir şekilde kullanabilirim. Her neyse, daha iyi bir yol 'sendKeys()' metodunu ' 'elemanında kullanmaktır. Bunu denedin mi? –

cevap

5

Ya bunlardan birini kullanarak bir Nonblocking tıklama yapabileceği Eğer Selenyum RC veya WebDriver hakkında

JavascriptExecutor js = (JavascriptExecutor)driver; 

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

İlk sonuç benim için çalıştı, ancak daha sonra bir Actions.perform() yapmam gerekiyordu. Teşekkürler! – Zoltorn

+0

@ user2246596 Evet, bunun için üzgünüm, bunu unutmuşum. Her neyse, yardımcı olabildiğime sevindim! –

0

: yükleme penceresi kapatıldı kadar ben (vb xy pozisyonda tıklayarak ALT-F4,) önceden

DÜZENLEME içinde

Teşekkür verdi komutların herhangi yapmadan önce bu bekledi Bunu benzer bir soru için cevapladım. AutoIT kullanarak Upload - Like için sunulan diğer çözümler var. Ancak kişisel olarak herhangi bir OS'ye özel diyaloglar ile etkileşime girmeyi erteleyecektim. OS'ye özel diyaloglar ile etkileşimde bulunmak, belirli bir ortamdaki testleri çalıştırmanızı sınırlandırır.

Selenium webdriver java - upload file with phantomjs driver

Daima & tip yüklemeler endişe "Dosya" unsurları ile etkileşim tespit. Bu, pop up sorununuzu çözer.

Ör: Benim uygulamada yükleme ile ilgili elemanlar DOM altında var - Bu durumda

<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"/> 

, türe "dosya" nin olduğunu TuşGönder yöntemini etmek "multiFileInput" kullanabilirsiniz. Bu şekilde tüm FF, Chrome & da başsız tarayıcılar için çalışır.

The Advanced User Interactions API (JavaDocs)

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

veya JavaScript:

+0

Şey, uyarı kutusunu almamın bir yolu yok. Yüklemeyi vurduğumda, daha sonra metin yerleştirebileceğim metin alanını görebileceğim yeni bir sayfaya götürür, ancak buna ek olarak windows yükleme kutusunu başlatır. Dosyayı doğru bir şekilde yükleyip gönderebiliyorum, bu pencereden kurtulmak için ne yapacağımı anlayamıyorum. Şimdiye kadar el ile iptal etmek zorunda kaldım. – Zoltorn

İlgili konular