Cel lekcji

Zaprzęgniemy WebDriver do pracy i uruchomimy przeglądarkę za pomocą kodu. Będzie wiele nowych pojęć, nie przejmuj się jeśli nie zapamiętasz ich wszystkich – będziemy je wałkować przez kolejne lekcje więc 🙂

Video

Wersja video poniższej lekcji:

AKTUALIZACJA lekcji wideo:
W związku z odświeżeniem tekstu całej serii kursów – lekcje wideo mogą okazać się odrobinę nieaktualne. Pracujemy nad tym – mimo to pozostawiamy wersję wideo gdyż pokazane tam kroki są generalnie poprawne.

Użycie modułu

Skorzystajmy z zaimportowanego modułu webdriver.
Pod naszą linią z importem:

from selenium import webdriver

wpisujemy linię

driver = webdriver.Chrome(executable_path=r'C:\TestFiles\chromedriver.exe')

Przypisujemy tu do zmiennej driver obiekt, który pozwala sterować przeglądarką Chrome. Warto również zauważyć, że:

  1. Korzystamy z metody (dopisana po kropce fraza: Chrome()) czyli w skrócie akcji która może być wykonana przez moduł webdriver.
  2. W metodzie Chrome() podajemy nazwę parametru i jego wartość. W naszym przypadku wartością jest ścieżka do pliku chromedriver.exe dla parametru executable_path)
  3. W wyniku wykonania metody Chrome() z parametrem executable_path dostajemy obiekt który zostanie przypisany do zmiennej driver. Dzięki temu mogę sterować konkretnie otwartą przeglądarką przez odnoszenie się do zmiennej driver.

Czyli tak na luzie możemy powiedzieć: Hej webdriver otwórz Chrome() i temu Chrome() dodaj informację, że drivera na moim kompie znajdzie tu C:\TestFiles\chromedriver.exe ( a Chrome przechowuje sobie tę ścieżkę pod nazwą executable_path więc tam też ją dorzucę).

TIP: Akcje na naszych obiektach (np. webdriver) wykonujemy poprzez użycie kropki .. Po wpisaniu nazwy akcji (np. Chrome) zakańczamy ją nawiasem (). Czasem w nawiasach mogą być wymagane parametry – jednak nie jest to regułą.
TIP: może Cię zastanawiać litera r w executable_path=r'C:\TestFiles\chromedriver.exe', która znajduje się przed całą ścieżką do pliku exe. Oznacza ona, że napis zostanie potraktowany tak jak wygląda, a wszystkie specjalne znaki (takie jak np \t co standardowo odczytywane jest jako tabulacja) zostaną zignorowane. Możesz poczytać o niej więcej w naszym słowniku.

 

Wynik można zobrazować tak webdriver.Chrome() zwraca wbdrivera sterującego przeglądarką i nadajemy mu nazwę driver.

TIP: Zrób jednolinijkową przerwę pomiędzy deklaracjami importów a właściwym kodem – są to zalecenia formatowania języka Python

UWAGA: Formatowanie kodu jest bardzo ważne w języku Python, dlatego stosowanie się do sugerowanych wytycznych jest niezbędne. O ile brak odstępu pomiędzy linijkami nie spowoduje błędu kodu, o tyle niepoprawne wcięcie może zaburzyć całkowicie działanie skryptu. Jeśli coś u Ciebie nie działa – sprawdź czy twój kod jest identyczny jak zaprezentowany w naszych przykładach. Niepoprawne działanie skryptu w Python często jest spowodowane przez błędy w formatowaniu.

Uruchamianie kodu

Czas sprawdzić napisany kod i uruchomić go z poziomu naszego IDE. Z górnego menu wybieramy Run->Run..->auto_test_1

Może pojawić się potrzeba akceptacji zezwolenia skryptom pythonowym na dostęp do sieci:

Na dole pojawi się okno z informacjami na temat uruchomionego pliku (to okno nazywamy konsolą uruchomieniową)

i powinna zostać automatycznie uruchomiona instancja przeglądarki Chrome (instancja czyli w tym przypadku osobne okno czystej przeglądarki).

Zamykam okno Chrome co kończy test.

Nieźle – udało się automatycznie uruchomić przeglądarkę – to oznacza, że nasz kod działa.

Sterowanie przeglądarką

Zmienna driver jest reprezentacją webdrivera sterującego przeglądarką więc można wywołać na niej różne metody. Na przykład przejście do danego adresu (czyli naszej testowej strony).

Wywołamy więc na naszej zmiennej metodę get() która jako parametr przyjmuje adres strony do której ma przejść przeglądarka (tym razem nie podajemy nazwy parametru tylko od razu jego wartość ze względu na domyślną obsługę w tym przypadku). Pamiętasz – driver przechowuje w sobie reprezentację webdrivera a ona z kolei ma swoje metody dlatego możemy je wywoływać używając driver.

driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')

TIP: Ostatnia konfiguracja uruchomieniowa została zapamiętana więc test można ponownie uruchomić z kombinacji SHIFT + F10 lub kliknąć zieloną strzałkę w prawym górnym rogu.

Po poprawnym uruchomieniu przeglądarka powinna wyświetlić testowaną stronę.

W następnym kroku zapiszemy tytuł strony – czyli wartość którą zazwyczaj widzisz w karcie przeglądarki. Pobieramy ze zmiennej driver atrybut title który zwraca tytuł bieżącej strony. W sumie atrybut niewiele się różni od metody – jak widzimy wywołujemy go bez () i możemy traktować go bardziej jako wartość a nie akcję (jak np. metoda get()). Zapisujemy zwróconą wartość do nowej zmiennej zmiennej title, dzięki czemu wynik który uzyskuję za pomocą wywołania driver.title jest łatwo dostępny.

title = driver.title

Kolejny wiersz to wypisanie zawartości zmiennej na konsolę uruchomieniową czyli miejsce gdzie są logowane akcje jakie wykonuje nasz kod.

Korzystamy tu z wbudowanej funkcji Pythona print

TIP: Funkcja wbudowana to taki kod, który możemy uruchomić bez potrzeby importowania czy instalowania dodatkowych rzeczy. Kod dla funkcji jest dostarczany wraz z językiem programowania. W przypadku Pythona wystarczy, że wpiszemy nazwę takiej funkcji i jest ona gotowa do użytku – niezłe prawda? 🙂

Funkcja print przyjmuje jako parametr wszystko co byśmy chcieli zobaczyć w konsoli i może być przedstawione w formie tekstu. Przypomnę tu jeszcze raz, że funkcja to taka metoda ale wywoływana bezpośrednio. Sam zobacz:

 print(title)

Po uruchomieniu testu powinniśmy zobaczyć wypisany tytuł na konsolę

Podsumowanie i cały kod

Udało nam się nie tylko uruchomić przeglądarkę ale i nawigować do strony i pobrać oraz wyświetlić tytuł strony na konsoli. Dodatkowo zadeklarowaliśmy zmienne i skorzystaliśmy z wbudowanego print. Poznaliśmy podstawową różnicę pomiędzy funkcją, metodą a atrybutem. W kolejnej lekcji rozwiniemy te działania.

from selenium import webdriver

driver = webdriver.Chrome(executable_path = r'C:\TestFiles\chromedriver.exe')
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
title = driver.title
print(title)

5 komentarzy

  1. Cześć!
    Dostaję taki warning (zaktualizowałam sobie chromedrivera i chrome’a oraz wersję pythona do najnowszych wersji):

    
     DeprecationWarning: executable_path has been deprecated, please pass in a Service object
      driver = webdriver.Chrome(executable_path=r'C:\TestFiles\chromedriver.exe')
    
    

    Ponadto, na starcie uruchamia mi się strona:
    chrome://settings/triggeredResetProfileSettings

    Finalnie wchodzi na stronę, którą mu podaję, ale nie w zakładce :data tylko właśnie w tej z ustawieniami chrome’a.

    Z pierwszym problemem poradziłam sobie tak:

    
    import selenium.webdriver.chrome.service as service
    service = service.Service(executable_path=r'C:\TestFiles\chromedriver.exe')
    service.start()
    capabilities = {'chrome.binary': "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"}
    driver = webdriver.Remote(service.service_url, capabilities)
    
    

    Ale nie wiem, jakie są wady i zalety tego rozwiązania? Czy może lepiej zostawić ten warning w spokoju?

    Z drugim poradziłam sobie stosując to rozwiązanie:
    https://support.leapwork.com/hc/en-us/articles/115001642052-Chrome-browser-is-opening-Settings-as-default-tab-and-asking-to-reset-chrome-settings

    I myślę, że to OK 😉

    Czekam na Wasz komentarz!

    Avatar Angelika Michałek
    1. Ciekawe problemy i podejście do rozwiązania. Wygląda dla mnie, że korzystasz z najnowszego – jeszcze standardowo nieudostępnionego Selenium dla pythona (https://github.com/SeleniumHQ/selenium/commit/19887a4bf810b500518125bde7f36e4eaa884626#diff-3cc362239fab45745a57b849489ef37a) Chociaż, w sumie takie ostrzeżenie zostanie wprowadzone wraz z wypuszczeniem Selenium 4 i zalecane będzie używanie chromedriver poprzez systemowy path.

      Co do tego, że wykorzystałaś uruchomienie poprzez service.Service() to jest to poprawne podejście i wiąże się ono z bardziej kontrolowanym uruchamianiem drivera – jest to opisane http://chromedriver.chromium.org/getting-started. Czyli tak naprawdę zrobiłaś kroki, które standardowa komenda webdriver.Chrome(executable_path=r'C:\TestFiles\chromedriver.exe') wykonuje w swoich wnętrznościach 😀

      I jeszcze problem z dziwnym tabem w Chrome – jest to spowodowane ustawieniami w twojej przeglądarce które mogły być nadpisane przez antywirusa czy inne oprogramowanie. Poradziłaś sobie świetnie z tym problemem właśnie poprzez reset klucza w Windows. Czasami też pomaga uaktualnienie przeglądarki wraz z driverem.

      Oczywiście odpowiedź na pytanie Krzycha o wersje przybliży nam naturę problemu z którym się spotkałaś 😀
      Pozdrawiam

      Przemek Barański Przemek Barański
  2. Zapytam jako przyszły tester a raczej adept 😀 czy ta literka”r” executable_path= r jest do czegoś potrzebna? Czy jest to po prostu literówka która jedyne co robi to wisi? Sprawdzałem w kodzie i działa z i bez niej oznacza to że nie pełni ona żadnej funkcji?

    Avatar Wojciech Kurowski
    1. Hej,
      Odpowiem tak – to zależy 😉
      Faktycznie, w naszym przypadku executable_path=r'C:\TestFiles\chromedriver.exe' jest możliwość jej pominięcia, ale polecam przeprowadzić szybki test 😉
      Zmień nazwę katalogu TestFiles na testFiles i popraw także ścieżkę w testach na executable_path='C:\testFiles\chromedriver.exe'.

      Czy po uruchomieniu testów wszystko jest ok? 😉

      W przypadku z t pojawia się znak specjalny – \t, który oznacza Tab przez co cała ścieżka jest błędnie interpretowana przez Pythona. Prefix r pozwala to naprawić i \t jest traktowane jako \t a nie Tab 🙂

      (w drugim Tip o tym wspominamy 😉 )

      Krzysiek Kijas Krzysiek Kijas

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *