• Przejdź do głównej nawigacji
  • Przejdź do treści
  • Przejdź do głównego paska bocznego
  • Przejdź do stopki
Testelka.pl

Testelka.pl

Testelka.pl - o technologiach w testowaniu oprogramowania

  • Kursy
    • DARMOWY: Java dla testerów
    • Selenium w Javie
    • Selenium w C#
    • Testy API w REST Assured
    • Selektory CSS
    • XPath
  • Materiały na raz
  • Blog
  • O Eli
  • Zaloguj się
  • DOŁĄCZ

Selenium 31. Interakcje z WebElementami: wgrywanie pliku z dysku

Strona główna > Kursy > Kurs Selenium w Javie > Selenium 31. Interakcje z WebElementami: wgrywanie pliku z dysku

W tej lekcji pokażę Ci wgrywanie pliku z dysku w Selenium. Można to zrobić przekazując ścieżkę do pliku jedną z metod, którą poznaliśmy w poprzedniej lekcji.

Zmiana adresu strony

Strona, którą pokazuję w poniższym filmie trochę się zmieniła. Przede wszystkim, żeby przejść do interesującej nas funkcjonalności przejdź pod: https://gofile.io/uploadFiles. Zmienił się również interfejs ale nie zmieniła się zasada działania. W związku z tym lokatory mogły się zmienić w stosunku do tego co pokazuję. Ponieważ ta lekcja nie ma odpowiadającego jej zadania, potraktuj wgranie pliku na nowo wyglądającą stronę jako zadanie 💪

Problemem z wgrywanie pliku z dysku jest fakt, że otwiera nam się systemowe okno do wyboru pliku. Kto próbował takie rzeczy robić ten wie, że Selenium tego okna nie obsłuży. Można by pomyśleć, że sprawa wobec tego jest beznadziejna i nie będziemy obsłużyć żadnego scenariusza z wgrywaniem pliku. Na szczęście tak nie jest i plik możesz wgrać tylko trzeba wiedzieć jak i oto właśnie dostąpisz tej tajemnej wiedzy.

Obiekty, które pozwalają na upload pliku z dysku, to obiekty o tagu input i atrybucie type o wartości file. Czasami te obiekty są przysłonięte na stronie jakimś ładniejszym elementem ale takiego inputa znajdziecie bez problemu w konsoli developerskiej. Gdy już go namierzysz, to pozostaje Ci tylko wykonać instrukcje z nagrania.

Reader Interactions

Komentarze

Nie masz aktywnej subskrypcji. Wykup subskrypcję albo zaloguj się, by móc komentować.

Komentarze

  1. urszula budziszewska napisał

    8 sierpnia, 2019 o 9:45 pm

    Hej, co jesli moje id nie jest tak dobre jak file? Jakies inne rozwiazania dla wgrania pliku? Masz moze jakies dobre zródła robot framework?

    Odpowiedz
    • Ela Sądel napisał

      9 sierpnia, 2019 o 2:42 pm

      Halko! Co masz na myśli pisząc "moje id nie jest [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  2. Piotr Z. napisał

    7 września, 2020 o 2:27 pm

    szkoda ze nie ma przykladu z input[type='file'] na przyklad na fakestore, poniewaz strona z tutoriala gofile.io jest juz zupelnie inna i nie ma tam tego pola.

    Odpowiedz
    • Ela Sądel napisał

      7 września, 2020 o 3:39 pm

      Halko! No właśnie nie jest zupełnie inna, zmien [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  3. dawid_r napisał

    9 października, 2020 o 4:04 pm

    Hej
    Mam dziwny problem. Kejs wręcz identyczny jak w tej lekcji. Mianowicie poprawne logowanie i asercja, gdzie po zalogowaniu pobieram Stringa z kontrolki na której wyświetlona jest nazwa zalogowanego usera. Przed samą assercją zapisuję jeszcze w zmiennej String wartość, którą pobieram z danej kontrolki.
    Puszczam test i się wywala:

    org.opentest4j.AssertionFailedError: Expected login: oczekiwany.login@costam.pl was not found. ==>
    Expected :oczekiwany.login@costam.pl
    Actual :

    Pole Actual jest puste, wiec nic dziwnego, ze wywala błąd. Pytanie dlaczego tak jest ??
    Ustawiam BreakPointa przed samą asercją, zaraz po tym jak zczytuję do Stringa wartość kontrolki na której zapodaje metodkę getText() i w Debugu pod zmienną Stringową wartość jest widoczna, czyli pobiera się poprawnie.
    Może trochę zakręciłem, ale chyba rozumiecie o co mi chodzi ? 🙂

    Pozdrawiam.

    Odpowiedz
    • Ela Sądel napisał

      10 października, 2020 o 4:06 pm

      Halko! Jesteś pewien, że zadałeś pytanie do w [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
      • dawid_r napisał

        12 października, 2020 o 9:06 am

        Dzięki za odpowiedź.
        Sorry, faktycznie nie dodałem tego wpisu pod właściwą lekcją. Powinien być pod lekcją wcześniejszą (30) i genaralnie mój kejs jest taki sam jak w przypadku logowania do zooniverse. Na końcu daję asercję.
        Jednak czy ustawię braeakpointa czy nie, efekt jest ten sam. W akcie desperacji dałem nawet zwykłego Sleepa przed samą asercją. Wszystko się załadowało, a i tak asercja się wywala i w logu w polu Actual zwraca pustego stringa.

        Odpowiedz
        • Ela Sądel napisał

          12 października, 2020 o 9:30 am

          Jeżeli dobrze rozumiem Twój przypadek nie dotycz [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

          Odpowiedz
  4. dawid_r napisał

    12 października, 2020 o 11:34 am

    Tak tak, problem nie dotyczy aplikacji na której pracujemy w lekcji, ani testowego sklepu.
    Po części udało mi się rozwiązać problem. Mianowicie, kiedy wcześniej zrobię click() ma poszukiwanym elemencie, a potem getText() wszystko działa poprawnie. Jeśli od razu robię getText() dostaję pustego Stringa.

    Odpowiedz
  5. Jakub Legan napisał

    19 listopada, 2020 o 3:11 pm

    Hej,
    jest jakaś opcja żeby wrzucić więcej niż 1 plik czy trzeba to zrobić jak ja poniżej?

        @Test
        public void testUploadFile2() {
    
            String expectedFileName1 = "google.png";
            String expectedFileName2 = "allegro.png";
            String expectedFileName3 = "youtube.png";
            String path1 = "C:\\Users\\Kuba\\Desktop\\New folder\\" + expectedFileName1;
            WebElement uploadFileInput1 = driver.findElement(By.cssSelector("input[type='file']"));
            uploadFileInput1.sendKeys(path1);
            String path2 = "C:\\Users\\Kuba\\Desktop\\New folder\\" + expectedFileName2;
            WebElement uploadFileInput2 = driver.findElement(By.cssSelector("input[type='file']"));
            uploadFileInput2.sendKeys(path2);
            String path3 = "C:\\Users\\Kuba\\Desktop\\New folder\\" + expectedFileName3;
            WebElement uploadFileInput3 = driver.findElement(By.cssSelector("input[type='file']"));
            uploadFileInput3.sendKeys(path3);
    
            String fileNameElement1 = driver.findElement(By.xpath("//td[contains(text(),'google.png')]")).getText();
            String fileNameElement2 = driver.findElement(By.xpath("//td[contains(text(),'allegro.png')]")).getText();
            String fileNameElement3 = driver.findElement(By.xpath("//td[contains(text(),'youtube.png')]")).getText();
    
            Assertions.assertEquals(expectedFileName1, fileNameElement1);
            Assertions.assertEquals(expectedFileName2, fileNameElement2);
            Assertions.assertEquals(expectedFileName3, fileNameElement3);
    
        }
    
    Odpowiedz
    • Ela Sądel napisał

      19 listopada, 2020 o 5:17 pm

      Halko! Możesz załadować te wszystkie ścieżki [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
      • Jakub Legan napisał

        19 listopada, 2020 o 5:29 pm

        ooo grejt, o to mi chodziło:

        uploadFileInput.sendKeys(path1 + "\n" + path2 + "\n" + path3);
        

        Dzięki wielkie 🙂

        Odpowiedz

Pierwszy Sidebar

LEKCJE W KURSIE

  • Przygotowanie środowiska programistycznego (DARMOWA LEKCJA)
  • Inicjalizacja drivera i demo Selenium (DARMOWA LEKCJA)
  • Nawigacja pomiędzy stronami (DARMOWA LEKCJA)
  • Zamykanie przeglądarki lub sesji (DARMOWA LEKCJA)
  • Zadanie: zamykanie przeglądarki i sesji (DARMOWA LEKCJA)
  • Tytuł strony, URL i jej źródło
  • Zadanie: pobieranie tytułu, URLa i źródła strony
  • Ciasteczka
  • Zadanie: ciasteczka
  • Rozmiar i pozycja okna przeglądarki
  • Zadanie: rozmiar i pozycja okna przeglądarki
  • Metody lokalizujące
  • Mechanizmy lokalizujące: nazwa klasy, id, atrybut name, nazwa taga
  • Mechanizmy lokalizujące: tekst linku
  • Zadanie: proste lokatory
  • Mechanizmy lokalizujące: wprowadzenie do selektorów CSS i XPath
  • Selektory CSS: tag, id, klasa
  • Selektory CSS: atrybuty i łączenie warunków
  • Zadanie: atrybuty i łączenie warunków w selektorach CSS
  • Selektory CSS: fragment wartości atrybutu
  • Zadanie: fragment wartości atrybutów w selektorach CSS
  • Selektory CSS: relacje między elementami
  • Zadanie: relacje w selektorach CSS
  • XPath: atrybuty i tagi
  • XPath: fragment atrybutu i tekst
  • Zadanie: atrybuty i tekst w XPath
  • XPath: relacje między elementami
  • Zadanie: relacje między elementami w XPath
  • Timeouty: oczekiwanie na pojawienie się elementu i załadowanie strony
  • Interakcje z WebElementami: klikanie w elementy i wprowadzanie tekstu
  • Interakcje z WebElementami: wgrywanie pliku z dysku
  • Zadanie: interakcje z WebElementami
  • Wstęp do zasad programowania: DRY
  • Wstęp do zasad programowania: KISS
  • Wstęp do zasad programowania: YAGNI
  • Zadanie: wstęp do zasad programowania
  • Czekanie na warunki: ExplicitWait
  • Czekanie na warunki: ExpectedConditions
  • Zadanie: czekanie na warunki
  • Metody na WebElementach: pobieranie informacji o elementach i findElement()
  • Zadanie: metody na WebElementach
  • Ramki
  • Zadanie: ramki
  • Wykonywanie JavaScriptów
  • Zadanie: wykonywanie JavaScriptów
  • Obsługa alertów
  • Zadanie: obsługa alertów
  • Praca na kilku oknach przeglądarki
  • Zadanie: praca na kilku oknach przeglądarki
  • Listy rozwijane
  • Zadanie: listy rozwijane
  • Gesty w Selenium: wstęp
  • Gesty w Selenium: klik, podwójny klik oraz prawy przycisk myszy
  • Gesty w Selenium: zdarzenia klawiatury i wysyłanie tekstu
  • Zadanie: gesty w Selenium
  • Gesty w Selenium: przesuwanie obiektów
  • Zadanie: przesuwanie obiektów
  • Web Storage: metody na Local Storage i Session Storage
  • Web Storage: użycie JavaScript
  • Zadanie: WebStorage
  • Zrzuty ekranu: wykonywanie screenshotów strony i elementów
  • Zrzuty ekranu: przykład użycia screenshotów
  • Inicjalizacja driverów: Chrome, Firefox, Opera, Internet Explorer, Edge
  • Konfiguracja Selenium Grid
  • RemoteWebDriver: inicjalizacja drivera wspierającego testy w trybie rozproszonym
  • Projekt testowy
  • Omówienie projektu testowego: testy koszyka
  • Omówienie projektu testowego: testy płatności
  • Omówienie projektu testowego: testy metod płatności
  • Page Object Model: wprowadzenie
  • Page Object Model: jak zacząć budować własny framework testowy
  • Page Object Model: kolejna klasa Page Object
  • Zadanie z POM: przepisanie testu addOneProductTenTimesTest()
  • Page Object Model: refaktoryzacja kodu i klasa BaseTest
  • Page Object Model: refaktoryzacja kodu i klasa BasePage
  • Page Object Model: refaktoryzacja i nowa metoda w klasie CartPage
  • Page Object Model: części wspólne różnych stron na przykładzie HeaderPage
  • Zadanie z POM: części wspólne stron (stopka w POM)
  • Zadanie z POM: przepisanie pozostałych testów koszyka
  • Zadanie z POM: przepisanie testu płatności bez zakładania konta cz. 1
  • Zadanie z POM: przepisanie testu płatności bez zakładania konta cz. 2 - wprowadzanie danych karty
  • Page Object Model: DriverFactory
  • Plik konfiguracyjny
  • Wzorzec Singleton na przykładzie konfiguracji
  • Synchronizacja w Singletonie i konfiguracja bez Singletona
  • Dane testowe z pliku
  • PageFactory: inicjalizacja elementów i FindBy
  • Wady i zalety PageFactory oraz pozostałe możliwości

Footer

Elzbieta Natalia Sadel
Calle Marzo 9 1 D
41009 Sevilla
Hiszpania
NIF: Y7882076J

Zostań trenerem!

Regulamin
Polityka prywatności
Polityka wsparcia w ramach członkostwa

Koszulki i torby dla testerów

Pomoc
Kontakt

Poskładane z 💛 przez Automatela.pl

Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.ZgodaNie wyrażam zgodyPolityka prywatności