Ostatni tydzień był dla mnie dosyć pracowity. W projekcie, w którym pracuję szykuję spore zmiany w procesie testowym, a to sprawia, że po pracy potrzebuję trochę czasu na regenerację zwojów. Dlatego też zdecydowałam, że dzisiaj pokażę Ci zajawkę kursu, który dla Ciebie szykuję. Dumałam nad tym kilka tygodniu i wreszcie wydumałam, że to dziś.
Temat jaki wybrałam, to wgrywanie pliku z dysku za pomocą Selenium. Temat w gruncie rzeczy nieskomplikowany, jednak jest w nim jedna trudność. A mianowicie, nie każdy wie, że Selenium potrafi to zrobić. I mam nawet związaną z tym historię.
Pytanie o okienka systemowe
Na szkoleniu w Krakowie, które prowadziłam razem z Grześkiem, oprócz naszego gadania, było też sporo zadań do rozwiązania. W trakcie jednego z takich zadań jeden z naszych kursantów zadał pytanie spoza obszaru, którym się akurat zajmowaliśmy. Nie przywołam kropka w kropkę jak pytanie brzmiało, ale to było coś w stylu, jak i czym obsłużyć okienka systemowe, które się pojawią po jakiejś akcji w Selenium. Chyba się nawet pojawiło AutoIt w tym pytaniu.
Na początku nie zrozumiałam do końca skąd te okna systemowe i dlaczego każdy test to robi, żeby mógł iść dalej. Jak już się odkleiłam od rzeczywistości i moja wyobraźnia popatatajała na wyżyny moich umiejętności automatyzacji i zaczęłam rozkminiać jak to zrobić, żeby zadziało nie tylko lokalnie, dotarło do mnie jeszcze coś.
– […] bo za każdym razem potrzebuję wykonać upload pliku, każdy test tego potrzebuje…
No i problem się znacznie uprościł.
SendKeys i ścieżka do pliku
Tak naprawdę,wgrywanie pliku z dysku nie wymaga użycia okna systemowego. Elementy odpowiedzialne za upload pliku to inputy, których atrybut type jest file. Skoro element jest inputem, to możemy na nim użyć metody sendKeys(). No spoko, ale co wysyłamy w tej metodzie? Jedyną informację, jaka jest potrzebna, żeby wgrać plik z dysku: pełną ścieżkę do pliku. I normalnie to wszystko.
Należy jednak pamiętać o jednej rzeczy – to nie jest idealne odwzorowanie akcji użytkownika. Nie klikamy w button, nie wybieramy pliku z dysku z okna systemowego i nie zatwierdzamy swojego wyboru. Trochę obchodzimy problem naokoło. Ostatecznie używamy pod spodem tego samego inputa, którego używa aplikacja, gdy wybieramy plik z dysku ręcznie. Trzeba mieć jednak świadomość, że to nie do końca to samo.
Czy zatem to ma w ogóle sens, skoro nie jest dokładnie tak samo, jakby robił to człowiek? No pewnie, że ma. Wyobraź sobie, że masz kilkadziesiąt testów, z których każdy ma gdzieś w środku upload pliku, żeby móc przetestować coś innego. Testy w projekcie, w którym teraz pracuję, nie istniały by bez wgrania pliku z dysku.
Film
Po tym wstępie zapraszam Was do właściwej treści. A mianowicie filmu, na którym pokazuję wgrywanie pliku z dysku za pomocą Selenium w akcji.