Jak postępować z plikami cookie w Selenium Sterownik sieciowy

⚡ Inteligentne podsumowanie

Pliki cookie przechowują preferencje użytkownika i identyfikatory sesji jako pary klucz-wartość, Selenium WebDriver potrafi je odczytywać, zapisywać i odtwarzać, dzięki czemu automatyczny test pomija ekran logowania przy każdym kolejnym uruchomieniu.

  • 🔘 Podstawowe informacje o plikach cookie: Plik cookie zawiera nazwę, wartość, domenę, ścieżkę, datę wygaśnięcia oraz flagi secure i HttpOnly.
  • Sześć poleceń: getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed i deleteAllCookies obejmują wszystkie operacje.
  • Demo dwuetapowe: Krok pierwszy zapisuje plik cookie uwierzytelniania w pliku, krok drugi odtwarza go w celu uwierzytelnienia nowej sesji.
  • 🧪 Oszczędność czasu: Ponowne odtworzenie pliku cookie sesji usuwa kroki logowania z każdego przypadku testowego i skraca całkowity czas wykonania.
  • 🛠️. Bez edycji: Pliku cookie nie można modyfikować w miejscu jego utworzenia, należy więc usunąć stary plik i dodać jego nową kopię za pomocą Cookie.Builder.
  • ⚠️ Reguła domeny: Przed wywołaniem addCookie należy przejść do witryny docelowej, w przeciwnym razie przeglądarka odrzuci plik cookie.

Jak obsługiwać pliki cookie w Selenium Sterownik sieciowy

Plik cookie HTTP zawiera informacje o użytkowniku i jego preferencjach. Przechowuje informacje za pomocą pary klucz-wartość. Jest to niewielki fragment danych wysyłany z aplikacji internetowej i przechowywany w przeglądarce internetowej podczas przeglądania witryny przez użytkownika.

Jeśli jesteś nowy w temacie, zacznij od tego przewodnika testowanie plików cookie.

Selenium Polecenia zapytań dotyczące plików cookie

In Selenium W WebDriver możemy wyszukiwać i wchodzić w interakcję z plikami cookie za pomocą poniższych wbudowanych metod. Do każdej z nich można dotrzeć za pomocą metody driver.manage(), która zwraca interfejs Options.

Selenium Polecenia zapytania Wydajność
driver.manage().getCookies(); Zwraca listę wszystkich plików cookie
driver.manage().getCookieNamed(arg0); Zwraca określony plik cookie według nazwy
driver.manage().addCookie(arg0); Tworzy i dodaje plik cookie
driver.manage().deleteCookie(arg0); Usuwa określony plik cookie
driver.manage().deleteCookieNamed(arg0); Usuwa konkretny plik cookie według nazwy
driver.manage().deleteAllCookies(); Usuwa wszystkie pliki cookie

Dlaczego należy obsługiwać (akceptować) pliki cookie w Selenium?

Każdy plik cookie jest powiązany z nazwą, wartością, domeną, ścieżką, wygaśnięciem i statusem, czy jest bezpieczny, czy nie. Aby zweryfikować klienta, serwer analizuje wszystkie te wartości w pliku cookie.

Kiedy testowanie aplikacja internetowa wykorzystująca Selenium WebDriver, może zaistnieć konieczność utworzenia, zaktualizowania lub usunięcia pliku cookie.

Na przykład podczas automatyzacji sklepu internetowegoping aplikacji może zaistnieć potrzeba zautomatyzowania scenariuszy testowych, takich jak składanie zamówienia, przeglądanie koszyka, wprowadzanie informacji o płatnościach, potwierdzanie zamówienia itp.

Jeśli pliki cookie nie są przechowywane, konieczne będzie każdorazowe logowanie przed wykonaniem scenariuszy testowych wymienionych powyżej. Zwiększy to nakład pracy związany z kodowaniem i czas wykonania.

Rozwiązaniem jest zapisanie plików cookie w pliku. Later, pobierz wartości pliku cookie z tego pliku i dodaj je do bieżącej sesji przeglądarki. Dzięki temu możesz pominąć kroki logowania w każdej sesji. walizka testowa ponieważ sesja sterownika zawiera te informacje.

Serwer aplikacji traktuje teraz Twoją sesję przeglądarki jako uwierzytelnioną i bezpośrednio przekierowuje Cię do żądanej strony. URL.

Jak postępować z plikami cookie w Selenium

Użyjemy https://demo.guru99.com/test/cookie/selenium_aut.php dla naszych celów demonstracyjnych.

Będzie to proces dwuetapowy.

Krok 1) Zaloguj się do aplikacji i zapisz wygenerowany plik cookie uwierzytelniający.

Aplikacja demonstracyjna prezentuje prosty formularz logowania pokazany poniżej.

Guru99 Selenium formularz logowania demonstracyjny plików cookie z polami nazwy użytkownika i hasła

Krok 2) Użyj zapisanego pliku cookie, aby ponownie zalogować się do aplikacji bez konieczności używania identyfikatora użytkownika i hasła.

Krok 1) Przechowywanie informacji o plikach cookie

package CookieExample;

import java.io.BufferedWriter;		
import java.io.File;		
import java.io.FileWriter;
import java.util.Set;
import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.Cookie;		

public class cookieRead{	
        public static void main(String[] args)		
    {
    	WebDriver driver;	
        System.setProperty("webdriver.chrome.driver","G:///chromedriver.exe");					
		driver=new ChromeDriver();        
		driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php");

       				
        // Input Email id and Password If you are already Register		
        driver.findElement(By.name("username")).sendKeys("abc123");							
        driver.findElement(By.name("password")).sendKeys("123xyz");							
        driver.findElement(By.name("submit")).click();					
        		
        // create file named Cookies to store Login Information		
        File file = new File("Cookies.data");							
        try		
        {	  
            // Delete old file if exists
			file.delete();		
            file.createNewFile();			
            FileWriter fileWrite = new FileWriter(file);							
            BufferedWriter Bwrite = new BufferedWriter(fileWrite);							
            // loop for getting the cookie information 		
            	
            // loop for getting the cookie information 		
            for(Cookie ck : driver.manage().getCookies())							
            {			
                Bwrite.write((ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure()));																									
                Bwrite.newLine();             
            }			
            Bwrite.close();			
            fileWrite.close();	
            
        }
        catch(Exception ex)					
        {		
            ex.printStackTrace();			
        }		
    }		
}

⚠️ Uwaga dotycząca wersji: Linia System.setProperty jest zachowana dokładnie tak, jak napisano w oryginalnym samouczku. Selenium od 4.6, Selenium Menedżer automatycznie pobiera i konfiguruje pasujący chromedriver, więc ta linia nie jest już potrzebna w obecnej konfiguracji. Oryginalny kod jest pozostawiony bez zmian poniżej i nadal się kompiluje.

Code Wyjaśnienie

  • Utwórz instancję WebDriver.
  • Odwiedź witrynę za pomocą driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Zaloguj się do aplikacji.
  • Przeczytaj informacje o plikach cookie za pomocą
    driver.manage().getCookies();
  • Przechowuj informacje o plikach cookie za pomocą PlikuWriter klasa do pisania strumieni znaków i BufferedWriter aby zapisać tekst do pliku o nazwie Cookies.data.
  • Plik Cookies.data przechowuje wszystkie informacje o plikach cookie wraz z nazwą, wartością, domeną i ścieżką. Możemy pobrać te informacje i zalogować się do aplikacji bez podawania danych logowania.

Po uruchomieniu powyższego kodu, plik Cookies.data zostanie utworzony w strukturze folderów projektu. Otwórz plik, a zobaczysz dane logowania do AUT zapisane w formacie cookie, jak pokazano na zaznaczonym ekranie poniżej.

Zawartość pliku Cookies.data pokazująca zapisany plik cookie sesji w formacie ścieżki domeny wartości nazwy

Krok 2) Korzystanie z zapisanego pliku cookie w celu zalogowania się do aplikacji

Teraz uzyskamy dostęp do pliku cookie wygenerowanego w kroku 1 i użyjemy go do uwierzytelnienia naszej sesji w aplikacji.

package CookieExample;

import java.io.BufferedReader;		
import java.io.File;		
import java.io.FileReader;		
import java.util.Date;		
import java.util.StringTokenizer;		
import org.openqa.selenium.Cookie;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;

public class CookieWrite		
{		
  
	public static void main(String[] args){ 
    	WebDriver driver;     
       	System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");					
        driver=new ChromeDriver();					
    try{			
     
        File file = new File("Cookies.data");							
        FileReader fileReader = new FileReader(file);							
        BufferedReader Buffreader = new BufferedReader(fileReader);							
        String strline;			
        while((strline=Buffreader.readLine())!=null){									
        StringTokenizer token = new StringTokenizer(strline,";");									
        while(token.hasMoreTokens()){					
        String name = token.nextToken();					
        String value = token.nextToken();					
        String domain = token.nextToken();					
        String path = token.nextToken();					
        Date expiry = null;					
        		
        String val;			
        if(!(val=token.nextToken()).equals("null"))
		{		
        	expiry = new Date(val);					
        }		
        Boolean isSecure = new Boolean(token.nextToken()).								
        booleanValue();		
        Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure);			
        System.out.println(ck);
        driver.manage().addCookie(ck); // This will add the stored cookie to your current session					
        }		
        }		
        }catch(Exception ex){					
        ex.printStackTrace();			
        }		
        driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php");					
}	
	}	

Wynik: Zostaniesz przeniesiony bezpośrednio do ekranu pomyślnego logowania bez konieczności wprowadzania identyfikatora użytkownika i hasła.

UWAGA: Jeśli po wykonaniu powyższego skryptu zobaczysz stronę logowania, użyj twardego odświeżenia.

⚠️ Java Uwagi: Skrypt czytnika używa new Boolean(String) i new Date(String), które JDK dawno temu wycofał z użytku. W nowoczesnym JDK odpowiednikami są Boolean.parseBoolean(token.nextToken()) i parser java.time. Oryginalne wiersze zostały zachowane powyżej; traktuj notatkę jako współczesny zamiennik, a nie edycję.

Atrybuty plików cookie i Selenium Klasa ciasteczek

Dwa powyższe skrypty przenoszą sześć pól do i z pliku. Właśnie te pola udostępnia klasa org.openqa.selenium.Cookie, a ich znajomość znacznie ułatwia odczytanie pętli tokenizatora w kroku 2.

Atrybut Akcesor Co to znaczy
Imię i nazwisko getName () Klucz, którego szuka serwer, na przykład JSESSIONID.
Wartość: getValue () Przechowywane dane, zwykle identyfikator sesji.
Domena pobierzDomenę() Host, do którego przeglądarka wyśle ​​plik cookie z powrotem.
ścieżka pobierzŚcieżkę() URL prefiks, do którego odnosi się plik cookie.
Wygaśnięcie pobierzWygaśnięcie() Data wygaśnięcia pliku cookie. Wartość null oznacza plik cookie sesji.
Zabezpiecz jest bezpieczny() Prawda, jeśli plik cookie jest wysyłany wyłącznie przez HTTPS.
HttpOnly jestHttpOnly() Prawda, kiedy JavaSkrypt na stronie nie może odczytać pliku cookie.
Ta sama witryna pobierzSameSite() Ścisłe, Luźne lub Żadne. Dodano w Selenium 4.

Zamiast konstruktora z sześcioma argumentami, użytego w kroku 2, obecny kod zwykle tworzy plik cookie za pośrednictwem wewnętrznej klasy Builder, która umożliwia ustawienie tylko tych pól, które Cię interesują.

Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4")
        .domain("demo.guru99.com")
        .path("/")
        .isSecure(true)
        .isHttpOnly(true)
        .build();

driver.manage().addCookie(sessionCookie);

Jedna zasada zaskakuje większość osób: obiektu cookie nie można edytować po utworzeniu. Aby zmienić wartość, należy usunąć stare cookie i dodać jego odbudowaną kopię, dlatego Builder jest tak przydatny.

Cookie original = driver.manage().getCookieNamed("JSESSIONID");
driver.manage().deleteCookie(original);

Cookie updated = new Cookie.Builder(original.getName(), "NEW-VALUE")
        .domain(original.getDomain())
        .path(original.getPath())
        .isSecure(original.isSecure())
        .build();

driver.manage().addCookie(updated);

Typowe błędy plików cookie Selenium WebDriver i jak go naprawić

Kod pliku cookie często ulega awarii z kilku przewidywalnych powodów. Poniższa tabela zawiera listę najczęściej zgłaszanych błędów wraz z przyczyną i sposobem ich rozwiązania.

Objaw Spowodować Fix
InvalidCookieDomainException Funkcja addCookie została wywołana przed przejściem do witryny, więc przeglądarka nadal wyświetla komunikat about:blank. Najpierw wywołaj driver.get w domenie docelowej, a następnie dodaj plik cookie.
Nie można ustawić wyjątku Cookie Domena pliku cookie nie odpowiada aktualnie załadowanej stronie. Usuń pole domeny lub ustaw je na dokładny host otwartej strony.
Strona logowania nadal się wyświetla po dodaniu pliku cookie Strona została wyrenderowana przed utworzeniem pliku cookie. Wywołaj driver.navigate().refresh(), co jest tym, co UWAGA powyżej oznacza twarde odświeżenie.
getCookieNamed zwraca null Nazwa jest błędnie napisana lub plik cookie należy do innej ścieżki lub subdomeny. Przekopiuj wszystkie pliki cookie za pomocą getCookies i porównaj ich nazwy.
Zapisany plik cookie zostanie odrzucony w późniejszym uruchomieniu Upłynął termin ważności lub serwer zakończył sesję. Aby ponownie wygenerować plik Cookies.data, ponownie wykonaj krok 1.

Jeśli przeglądarka otwiera się i uwierzytelnia poprawnie, ale skrypt później nie działa, prawdopodobnie problem nie leży w pliku cookie. obsługa wyjątków w Selenium jest szybszą trasą z tego punktu i dedykowaną Firefox profil jest popularnym rozwiązaniem, gdy chcesz, aby dane sesji przetrwały bez żadnego pliku.

FAQ

Dwie opcje. Kliknij przycisk „Akceptuj”, jak w przypadku dowolnego elementu, lub ustaw plik cookie zgody witryny za pomocą addCookie przed ponownym załadowaniem, aby baner nigdy się nie wyświetlał. Drugie podejście jest szybsze i eliminuje częste źródło niestabilnych pierwszych kroków.

Python Używa odpowiedników snake_case w samym sterowniku: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) i driver.delete_all_cookies(). Pliki cookie są zwracane jako słowniki, a nie obiekty Cookie, dlatego odczytaj wartości w nawiasach kwadratowych.

Tak. WebDriver komunikuje się z przeglądarką za pośrednictwem sterownika, a nie za pośrednictwem JavaSkrypt, dzięki któremu pliki cookie HttpOnly są widoczne za pomocą getCookies. Wywołaj metody isHttpOnly i isSecure na obiekcie Cookie, aby sprawdzić te flagi.

Grupy analityczne wspomagane sztuczną inteligencją nieudane przebiegi są często wynikiem współdzielonych sygnałów traces sporadyczne błędy wylogowania z powodu wygasłego lub brakującego pliku cookie sesji. Niektóre narzędzia uczą się również, które pliki cookie są przechowywane w trakcie przechodzenia przez sesję i ostrzegają, gdy sesja odbiega od tego poziomu bazowego.

Drugi pilot GitHub szybko zapisuje pętle odczytu, zapisu i przywracania, ale często odtwarza przestarzałe konstruktory new Boolean i new Date. Revprzeglądaj każdy wygenerowany fragment kodu w porównaniu z bieżącym Java oraz Selenium Pszczoła.

Nie. Plik cookie sesji to aktywne dane uwierzytelniające, więc zatwierdzony plik Cookies.data pozwala każdemu z dostępem do repozytorium podszywać się pod to konto. Zachowaj plik poza kontrolą wersji i generuj go ponownie dla każdego środowiska.

Domyślnie nie. Każda sesja rozpoczyna się od czystego profilu przeglądarki, dlatego właśnie plik cookie jest zapisywany na dysku i odtwarzany. Dołączenie zapisanego profilu przeglądarki to inny sposób na utrzymanie sesji aktywnej w różnych momentach.

Pliki cookie sesji mają znacznik czasu wygaśnięcia, a serwer również tracks ma swój własny czas życia sesji. Po upływie któregokolwiek z nich odtworzony plik cookie jest odrzucany, a strona logowania powraca, dlatego należy ponownie wygenerować zapisany plik cookie, zamiast ponownie używać starego pliku.

Podsumuj ten post następująco: