2013-06-03 7 views
47

Czy ktoś może mi powiedzieć, jak przesłać plik przy użyciu Selenium przez kod Java?Jak przesłać plik za pomocą Selenium WebDriver w Javie

Po kliknięciu przycisku w aplikacji otwiera się w nowym oknie, co mogę użyć, aby wybrać plik do przesłania. Przycisk przeglądania opracowany przez Silverlight (C#).

+0

Witaj Mahesh - czy możesz podać nam trochę więcej tła? Być może zamieścisz zrzut ekranu i/lub kod swojej aplikacji internetowej i wyświetlisz kod webdrivera, który opracowałeś do tej pory? –

Odpowiedz

74

najpierw upewnij się, że element wejściowy jest widoczne

Jak stwierdził Mark Collin w dyskusji here:

nie klikaj na przycisk Przeglądaj, to wywoła poziomu OS dialog i skutecznie zatrzymaj test.

Zamiast tego można użyć:

driver.findElement(By.id("myUploadElement")).sendKeys("<absolutePathToMyFile>");

myUploadElement jest id tego elementu (przycisk w tym przypadku) i SendKeys trzeba określić bezwzględną ścieżkę treści chcesz przesłać (zdjęcie, wideo itp.). Seleni zrobi dla ciebie resztę.

Pamiętaj, że przesyłanie będzie działać tylko Jeśli element wysłać plik powinien być w formie <input type="file">

+1

Dodałem ten sam kod ... ale to nie działa –

+1

Witam @ArupRakshit, byłoby wspaniale, jeśli podasz tu sens kodu. Abyśmy mogli rzucić okiem na to, dlaczego nie działa. Dzięki. –

+4

Możesz użyć następującego kodu, aby uzyskać absolutną ścieżkę pliku i załadować zawartość 'String filePath = System.getProperty (" user.dir ") +" /src/res/test.pdf; driver.findElement (By.id ("elementID")) SendKeys (filePath);..?! ' – gihanchanuka

9
driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension"); 
3

Jeśli masz pole tekstowe wpisać ścieżkę do pliku, wystarczy użyć SendKeys aby wprowadzić ścieżkę pliku i kliknij przycisk Wyślij. Jeśli nie ma pola tekstowego do wpisania ścieżki pliku i można kliknąć tylko przycisk Przeglądaj i wybrać plik z wyskakującego okna, można użyć narzędzia AutoIt, zobacz poniższy krok, aby użyć AutoIt dla tego samego,

  1. Pobierz i zainstaluj narzędzie AutoIt z http://www.autoitscript.com/site/autoit/

  2. otwarte programy -> narzędzie Autoita -> SciTE Script Editor.

  3. Wklej następujący kod w edytorze AutoIt i zapisać go jako „nazwapliku.exe„(np: new.exe)

    Następnie skompilować i zbudować plik, aby go exe. (Narzędzia → kompilacji)

Code Auto:

WinWaitActive("File Upload"); Name of the file upload window (Windows Popup Name: File Upload)  
Send("logo.jpg"); File name  
Send("{ENTER}") 

następnie skompilować i zbudować z Narzędzia menu narzędzia AutoIt -> SciTE Script Editor.

wklej poniższy kod Java w edytorze Eclipse i zapisać

kod 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. 
+0

Dobra robota :-) poprawiłem na skrypcie trochę. https://stackoverflow.com/questions/14592853/how-to-upload-a-file-in-selenium-with-no-text-box#48578616 – SharpC

8

To co mogę używać, aby przesłać obraz poprzez okno Dodano:

//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); 

zrobić

+0

słodki, ale to są kluczem .. wydarzenia nie zdarzenia myszy (oczywiście) Tak czy inaczej świetny pomysł ... –

+0

nie zamknąć okno wysyłania dla mnie – mosaad

-1

Znajdź tag jako type="file". to główny tag wspierany przez selen. Jeśli możesz zbudować XPath z tym samym, gdy jest to zalecane.

  • użytku SendKeys dla opcji przycisku konieczności przeglądania (przycisk, który otworzy swoją skrzynkę okna, aby wybrać pliki)
  • teraz kliknąć na przycisk, który zamierza przesłać plik

jako poniżej: -

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(); 

do wielokrotnego przesyłania plików umieścić wszystkie pliki jeden po drugim przez SendKeys a następnie kliknij na przesłaniu

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 
+0

to nie działał mi –

+0

udostępnić kod HTML musi pracować .. zobacz docs selenu: -. https: //saucelabs.com/resources/articles/selenium-file-upload. Używam tego samego –

+0

zależy to również od systemu operacyjnego, z którego korzystasz, jeśli używasz systemu Windows, a następnie użyj \\, a jeśli system Linux lub mac to // –

2

Próbowałem użyć powyższego robota istnieje potrzeba, aby dodać opóźnienie :( również nie można debug lub zrobić coś innego, bo można stracić ostrość :(

// otwarte okno wysyłania 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); 
+0

Czy możesz wyjaśnić kroki klawisza robota, co dokładnie dzieje się podczas wywoływania powyższych poleceń? –

+0

To naciśnięcie klawisza Enter, wklejenie tekstu i ponowne naciśnięcie klawisza enter – blizz