2013-05-16 21 views
5

Próbuję pisać testy selenu dla strony internetowej przy użyciu java. Jednak podczas testowania przesyłania plików napotkałem problem.Sposób obsługi okna przesyłania plików Windows podczas używania selenu

Po kliknięciu przycisku przesyłania plików automatycznie otwiera się przesyłanie plików systemu Windows. Mam kod działający poprawnie w celu umieszczenia tekstu w polu wysyłania, po prostu nie ma nic, co mógłbym zrobić, aby zapobiec automatycznemu otwieraniu okna, a nieautomatyczne otwieranie pliku Windows nie jest możliwe. Od badania tego tematu rozumiem, że nie ma możliwości, aby selenowy webdriver sobie z tym poradził. Moje pytanie brzmi: w jaki sposób mogę po prostu zamknąć okno wysyłania w sposób zautomatyzowany?

Próbowałem klasy robotów Java i to nie działało. Czekał, aż okno Prześlij został zamknięty przed wykonaniem któregokolwiek z poleceń Dałem go (ALT-F4, klikając w xy pozycji, etc)

góry dzięki

EDIT:

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

Mówisz o Selenium RC lub WebDriver ? Ten pierwszy ma ['attachFile()'] (http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#attachFile%28java.lang.String, % 20java.lang.String% 29), ta ostatnia używa ['sendKeys()'] (http://stackoverflow.com/a/10717319/1273080) (link ma również kilka wskazówek dotyczących użycia klasy "Robot" który, jeśli jest właściwie używany, również zawsze działa). –

+0

Moje przeprosiny, w szczególności mówię o WebDriver. Problem z klasą robotów polega tylko na tym, aż okno dialogowe okna się zamknie, zanim uruchomi cokolwiek, o czym mówię. Miałem podobny problem dla skrzynki z alertami systemu operacyjnego i udało mi się przekonać robota do pracy, wydaje się, że jest to tylko okno wysyłania, które nie będzie działać, dopóki okno przesyłania nie zostanie zamknięte. – Zoltorn

+0

Absolutnie nie. Czy możesz pokazać nam swój kod? Mogę niezawodnie używać klasy 'Robot' do przesyłania plików. W każdym razie lepszym sposobem jest użycie metody 'sendKeys()' w elemencie ''. Próbowałeś tego? –

Odpowiedz

5

Można zrobić nonblocking kliknięcie za pomocą jednej z tych:

The Advanced User Interactions API (JavaDocs)

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

lub JavaScript:

JavascriptExecutor js = (JavascriptExecutor)driver; 

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

Pierwszy wynik zadziałał u mnie, ale musiałem później wykonać Actions.perform(). Dzięki! – Zoltorn

+0

@ user2246596 Tak, przepraszam za to, zapomniałem tego. W każdym razie cieszę się, że mogłem pomóc! –

0

Odpowiedziałem na to podobne pytanie. Istnieją inne rozwiązania dotyczące przesyłania - podobnie jak przy użyciu AutoIT. Ale osobiście chciałbym interakcji z dowolnym dialogów systemu operacyjnego. Interakcja z dialogami specyficznymi dla systemu operacyjnego ograniczyłaby możliwość uruchamiania testów z danego środowiska.

Selenium webdriver java - upload file with phantomjs driver

Zawsze zidentyfikować & interakcję z elementami typu „plik”, gdy dodane są zainteresowane. To rozwiązałoby twój problem pop-upów.

Ex: W mojej aplikacji, elementy związane wysyłania mają poniżej 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"/> 

W tym przypadku można użyć metody SendKeys do „multiFileInput”, który jest typu „plik”. W ten sposób będzie działać dla wszystkich przeglądarek FF, Chrome & również bezgłowych przeglądarek.

+0

Chodzi o to, że nie ma sposobu, aby nie dostać się do skrzynki z alertami. Kiedy trafiam upload, przenosi mnie do nowej strony, gdzie mogę zobaczyć pole tekstowe, w którym mogę umieścić tekst, ale oprócz tego uruchamia okno wysyłania Windows. Mam możliwość prawidłowego przesłania i wysłania pliku, po prostu nie mogę wymyślić, co zrobić, aby pozbyć się tego wyskakującego okienka. Do tej pory musiałem ręcznie uderzyć anulować. – Zoltorn