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ę).

Aktualizacja: 2023

⚠️Bardzo ważna aktualizacja dla Selenium + Chrome⚠️


Jeśli korzystasz z Selenium 4.11+ oraz Chrome 114+, to nie musisz używać chromedriver.exe. Wystarczy teraz, że użyjesz:

driver = webdriver.Chrome()

W najnowszej wersji biblioteka Selenium wykrywa wersję Chrome i sama pobiera odpowiednie informacje 😉

Dla zainteresowanych:

Aktualizacja: 2021
Wraz z pojawianiem się Selenium 4 uległo zmianie użycie ścieżki do pliku chromiedriver.exe.

Kod który zaprezentowaliśmy wciąż działa:

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

jednak przy jego wykonaniu pokazują się ostrzeżenia o nowym podejściu Selenium 4.

Wystarczy zmienić kod na taki:

from selenium.webdriver.chrome.service import Service

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

I już będzie on dostosowany do standardu Selenium 4. Jak widzisz wystarczy zaimportować Service i jako parametr podać ścieżkę. Wygląda bardzo podobnie do poprzedniego rozwiązania a unikamy ostrzeżeń w konsoli.

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 webdrivera 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 😀

Aktualizacja: W najnowszych wersjach Selenium i Chromedriver przeglądarka jest automatycznie zamykana na końcu skryptu. Jest to w poprawne i pożądane zachowanie 🙂

Kiedyś przeglądarka nie była zamykana i po kilkukrotnym uruchomieniu naszych skryptów mieliśmy otwartych kilka wersji przeglądarki Chrome. Dzięki tej zmianie nie musimy już się tym przejmować 🙂

Jeśli z jakiegoś powodu chcielibyśmy, aby nie została zamknięta, to możemy użyć jednej z 2 opcji:
Pierwsza to dodanie czekania, po którym przeglądarka zostanie zamknięta:

from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path=r'C:\TestFiles\chromedriver.exe')
driver.get("http://www.google.com/")

time.sleep(5) # Sleep for 5 seconds

Druga to eksperymentalna opcja detach, która spowoduje, że po wykonaniu skryptu przeglądarka będzie otwarta, aż jej nie zamkniemy:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options


chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(executable_path=r'C:\TestFiles\chromedriver.exe', options=chrome_options)
driver.get("http://www.google.com/")
UWAGA: W tym momencie czasem w konsoli może pojawić się następujący błąd:

DeprecationWarning: executable_path has been deprecated, please pass in a Service object:

Najprawdopodobniej związany jest on z używaniem najnowszej wersji paczki Selenium. W wersji 4.0 pojawiły się pewne zmiany, które wymuszają na nas inne przekazanie do Drivera informacji gdzie znajduje się chromedriver.exe. Samo pojawienie się ostrzeżenia DeprecationWarning nie wpłynie negatywnie na nasze skrypty, ale warto pomyśleć o jego rozwiązaniu w przyszłości. Dodatkowo, w dniu kiedy piszę te słowa (18.09.2019), Selenium 4 jest jeszcze w wersji alpha i zaleca się używać wcześniejszej, stabilnej wersji 3.14.0. Aczkolwiek, jeśli używasz już wersji 4 i chcesz zlikwidować ostrzeżenia DeprecationWarning, to musisz zastosować następującą konstrukcję:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service('C:\TestFiles\chromedriver.exe')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')

Jednakże na chwilę obecną nie jest to wymagane 😉 Tematy tutaj poruszone (sprawdzanie i instalowanie konkretnej wersji selenium) zostaną poruszone w kolejnych lekcjach. Wtedy też zyskasz pełną władzę nad instalowanymi pakietami 🤓

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)

27 komentarzy

  1. Hej, w przypadku kodu przeglądarka uruchamia sie i odrazu zamyka. Co może być tego przyczyną?
    Web driver mam w wersji 110.0.5481.77 a przeglądarka ma 110.0.5481.178 – jedyny pasujący.

    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)
    
    Avatar Jula
    1. Hej 🙂
      Co się wyświetla w konsoli po uruchomieniu tego skryptu?

      Wynikiem powinno być:

      DeprecationWarning: executable_path has been deprecated, please pass in a Service object
        driver = webdriver.Chrome(executable_path = r'C:\TestFiles\chromedriver.exe')
      Demobank - Bankowość Internetowa - Logowanie
      
      Process finished with exit code 0
      

      Informacja Demobank – Bankowość Internetowa – Logowanie sugeruje, że weszliśmy na dana strone i pobraliśmy jej tytuł 🙂

      PS. Aby zlikwidować ostrzeżenie DeprecationWarning rzuć okiem na sekcje Uwaga w tej lekcji 🙂

      Krzysiek Kijas Krzysiek Kijas
  2. nie mogę zaimportować z modułu “Selenium”. Wyskakuje błąd:
    Exception has occurred: ModuleNotFoundError
    No module named ‘selenium’
    File “C:\Users\NazwaUżytkownika\Desktop\1.py”, line 1, in
    from selenium import webdriver

    Avatar Maciejek Łuczewski
    1. Hej,
      Sprawdź proszę, czy masz poprawnie zainstalowany moduł Selenium – aby to zrobić przejdź do File – Settings, a następnie Project – Python Interpreter:

      SCREEN

      Kroki do instalacji (i analogiczne do sprawdzenia zainstalowanych modułów) opisaliśmy dokładniej w lekcji:
      Pierwszy kod – pojawia się Selenium.

      Daj mi proszę znać, czy Selenium jest na liście zainstalowanych pakietów 🙂

      Krzysiek Kijas Krzysiek Kijas
      1. Doskonale! 😀

        Reasumując – Chromedriver.exe to narzędzie (biblioteka) pozwalające na sterowanie przeglądarką z poziomu kodu i Selenium. Do przeglądarki jest Chromedriver, dla Firefoxa jest geckodriver itd. Czyli każdą przeglądarka ma swój zestaw narzędzi, który pozwala nią sterować z poziomu kodu i przy pomocy Selenium 🙂

        Podobnie jest przypadku innych narzędzi jak Cypress albo Playwright – tam też do sterowania przeglądarką pobierane są odpowiednie, dodatkowe zestawy narzędzi, które umożliwiają interakcje z daną przeglądarką.

        W przypadku Selenium, w tym kursie pokazujemy jak to zrobić ręcznie, dzięki czemu możesz zobaczyć jak to działa (bez automatycznej magii, dzięki której wszystko samo się pobierze etc.) 🙂

        Krzysiek Kijas Krzysiek Kijas
  3. Mam problem z kodem… jest napisany według instrukcji i pomimo tego strona, która powinna się otworzyć tego nie robi. Gdzie może być błąd??

    PyCharm 2022.2.1 (Community Edition) na Win10

    Avatar Rafał
      1. from selenium import webdriver
        
        from selenium.webdriver.chrome.service import Service
        
        service = Service('C:\Program Files\Google\Chrome\Application\chrome.exe')
        service.start()
        driver = webdriver.Remote(service.service_args_url)
        driver.execute_script('https:/google.com')
        title = driver.title
        print(title)
        

        Tak wygląda kod, natomiast w konsoli przeglądarki nic się nie wyświetla. Jedynie w Pycharmie dostaję informację na koniec “Process finished with exit code -1073741510 (0xC000013A: interrupted by Ctrl+C)”

        Avatar Rafał
        1. W przypadku obiektu Service w linii:

          service = Service('C:\Program Files\Google\Chrome\Application\chrome.exe')
          

          zamiast ścieżki do chrome.exe musisz podać ścieżkę do webDrivera, którego musisz pobrać z
          https://chromedriver.chromium.org/downloads
          a następnie rozpakować i umieścić w katalogu np. C:\TestFiles\. Tutaj zwróć proszę uwagę, aby pobierana wersja ChromeDrivera zgadzała się z wersją Chrome zainstalowanego w systemie.

          Aby użyć webdrivera możesz skorzystać z poniższej konstrukcji:

          service = Service('C:\TestFiles\chromedriver.exe')
          

          Również aby przejść na wskazany adres, zamiast:

          driver.execute_script('https:/google.com')
          

          użyj metody:

          driver.get('https:/google.com')
          

          W całości kod przyjmie następującą postać:

          from selenium import webdriver
          
          from selenium.webdriver.chrome.service import Service
          
          service = Service('C:\TestFiles\chromedriver.exe')
          driver = webdriver.Chrome(service=service)
          driver.get('https:/google.com')
          title = driver.title
          print(title)
          

          Daj proszę znać czy powyższe rozwiązanie zadziałało poprawnie 🙂

          Krzysiek Kijas Krzysiek Kijas
          1. Rozwiązanie faktycznie zadziałało. Bardzo dziękuję. Jednak pozostaje pytanie, co w momencie kiedy przeglądarka się zaktualizuje i nie będzie możliwości uruchomienia jej z chromedrivera, bo nie będzie już wsparcia??

            Avatar Rafał
            1. Doskonale 😀

              Zawsze istnieje pewne prawdopodobieństwo, że może się zakończyć, ale takie decyzje są ogłaszane z dużym wyprzedzeniem (ostatni taka sytuacja była przy Protraktorze, frameworku do testów UI w JavaScripcie – tam koniec wsparcia ogłoszono 2 lata wcześniej i zasugerowano alternatywy). Myślę, że chromedrivera będzie miał jeszcze wsparcie przez wiele lat. Dodatkowo przemawia za tym fakt, że to narzędzie jest używane tak samo powszechnie jak Selenium, a to stanowi podstawę w wielu projektach.

              Krzysiek Kijas Krzysiek Kijas
  4. Witam, mam problem z tym kodem:

    from selenium import webdriver
    from webdriver_manager import driver
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get('http://www.google.com')
    

    I się psuje, dostaję informację:

    /bin/sh: google-chrome: nie znaleziono polecenia
    ValueError: Could not get version for Chrome with this command: google-chrome --version
    

    Pracuję na systemie Linux Mint, próbuję uruchomić Chromium, wszystko aktualne.
    Jak sobie z tym poradzić?

    Avatar Gabriela Widota
    1. A przy kodzie dokładnie jak w lekcji:

      from selenium import webdriver
      driver = webdriver.Chrome(executable_path = r'/usr/local/bin/chromedriver')
      driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
      title = driver.title
      print(title)
      

      dostaję:

      FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/chromedriver': '/usr/local/bin/chromedriver'
      

      (ale na 100% chromedriver jest w tym folderze, bo używam terminalowego ‘which’, żeby dostać ścieżkę), po czym jako drugi bład mam:

      selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
      

      Jakieś pomysły, co z tym zrobić?

      Avatar Gabriela Widota
      1. Hej,
        W przypadku z ChromeDriverManager().install() i Chromium to nie wiem czy jest jakieś obejście. ChromeDriverManager zdaje się bazować tylko i wyłącznie na google chrome, i z tego powodu występuje błąd /bin/sh: google-chrome: nie znaleziono polecenia. Najprostszym rozwiązaniem jest instalacja Google Chrome.

        W drugim przypadku z katalogiem /usr/local/bin/ – skopiowałem w tam plik chromedriver i bez problemu skrypt go wykrył.
        Czy ten plik chromeriver został pobrany z oficjalnej strony (czyli https://chromedriver.chromium.org/downloads ) ? Spróbuj umieścić plik chromedriver w katalogu ze skryptem Pythona, zmień webdriver.Chrome(executable_path = r'./chromedriver') i uruchom skrypt – jaki będzie rezultat?

        Pozdrawiam,

        Krzysiek Kijas Krzysiek Kijas
        1. Cześć,
          co do Chrome/Chromium, dokładnie te same problemy mam z Firefoxem i geckodriverem :p
          A w drugim wypadku, tak, z oficjalnej strony, zgodnie z instrukcjami. Umieściłam go w folderze ze skryptem Pythona, i niestety kolejny (ale inny, więc jest progress) wyjątek:

          
          selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
          

          Może to faktycznie problem z Chromium, ale wydaje mi się, że za Chrome maintenance jest odpowiedzialny zespół Chromium, i czytałam, że ta różnica nie powinna mieć znaczenia.

          Moje próby z Firefoxem:

          options = webdriver.FirefoxOptions()
          options.binary_location = '/usr/bin/firefox'
          chrome_driver_binary = webdriver.Firefox(executable_path= './geckodriver')
          driver = webdriver.Firefox(chrome_driver_binary, firefox_options=options)
          

          I wyjątek (też nowy, ale jest mało konkretny, więc googlowanie po stackoverflow sobie trochę z nim nie radzi):

          selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
          

          Może tu da się coś zaradzić?

          Avatar Gabriela Widota
          1. Hej,
            Na moim Ubuntu 20.4 taki skrypt zadziałał:

            from selenium import webdriver
            from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
            
            binary_location = '/usr/bin/firefox'
            binary = FirefoxBinary(binary_location)
            driver = webdriver.Firefox(executable_path= './geckodriver', firefox_binary=binary)
            
            driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
            title = driver.title
            print(title)
            

            (dla firefox 75 x64 oraz geckodriver 0.26)

            Błąd:

            selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
            

            może sugerować brak kompatybilności pomiędzy wersją geckodriver a Firefoxem. Czy korzystasz z najnowszych wersji obu tych narzędzi?

            A jakie są powody braku zainstalowanego Chroma? 😀

            Pozdrawiam,

            Krzysiek Kijas Krzysiek Kijas
  5. U mnie pojawiał się komunikat
    ‘chromedriver.exe’ executable needs to be in PATH

    więc znalazłem to:

    pip install webdriver-manager - z terminala jest w 
    Now the above code in the question will work simply with below change,
    
    from selenium import webdriver
    from webdriver_manager import driver
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(ChromeDriverManager().install())
    

    Więc cały kod dla tej lekcji:

    from selenium import webdriver
    from webdriver_manager import driver
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
    title = driver.title
    print(title)
    
    
    1. Hej,
      Tak, to jest 3 sposób na poradzenie sobie z WebDriverem (po podaniu pełnej ścieżki jak w tej lekcji, i po dodaniu ścieżki do PATH) 😀
      Celowo pominęliśmy ten sposób tutaj na początku, gdyż chcieliśmy rozpocząć od najprostszego i najbardziej explicite sposobu podpięcia Drivera – czyli przez executable_path). Planujemy poruszy ten temat w części 6 (albo w bonusie), wraz z potencjalnymi zagrożeniami jakie ze sobą niesie 😉
      Pozdrawiam!

      Krzysiek Kijas Krzysiek Kijas
  6. 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. Przy Selenium 4 i problemie z:
      “DeprecationWarning: executable_path has been deprecated, please pass in a Service object
      driver = webdriver.Chrome(executable_path=r’C:\TestFiles\chromedriver.exe’)”
      wystarczy zmienić komende z:
      driver = webdriver.Chrome(executable_path=r’C:\TestFiles\chromedriver.exe’)
      na :
      driver = webdriver.Chrome()
      Wcześniej dodając webdrivera do path:)

      Nie wiem dlaczego tak długą formę dopięliście jeśli chodzi o rozwiązanie tego problemu

      Avatar Tomasz Skoczeń
      1. Hej,
        To prawda, w przypadku gdy posiada się chromedriver.exe dodanego do Path, to wystarczy zastosować konstrukcję webdriver.Chrome() 🙂 Jest to również sposób jaki zalecają Twórcy w Selenium4 (tu warto pamiętać, że Selenium4 nie miało jeszcze stabilnego wydania, dlatego też wiele może się jeszcze zmienić).
        Jeśli chodzi o zastosowane rozwiązanie na obecnym etapie lekcji – postanowiliśmy pójść w stronę bardziej explicite, aby pokazać jak to można zrobić w najprostszy sposób, bez bawienia się ustawieniami systemu etc., i minimalizując wynikające z tego problemy. Pamiętajmy tez, że oba podejścia, z PATH oraz executable_path, mają swoje mocne i słabe strony.

        PATH miał pojawić się odrobinę później, ale z racji nieubłaganie nadciągającego Selenium4, prawdopodobnie przyszykujemy mocne odświeżenie początkowych lekcji 😉

        Pozdrawiam,

        Krzysiek Kijas Krzysiek Kijas
  7. 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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *