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


