Cara Menangani Cookies di Selenium webdriver

⚡ Ringkasan Cerdas

Cookie menyimpan preferensi pengguna dan pengidentifikasi sesi sebagai pasangan kunci-nilai, dan Selenium WebDriver dapat membaca, menyimpan, dan memutar ulang sehingga pengujian otomatis melewati layar login pada setiap eksekusi berikutnya.

  • 🔘 Dasar-dasar cookie: Cookie membawa nama, nilai, domain, jalur, masa berlaku, serta flag secure dan HttpOnly.
  • ☑️ Enam perintah: getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed, dan deleteAllCookies mencakup setiap operasi.
  • ✅ Demonstrasi dua langkah: Langkah pertama menulis cookie otentikasi ke dalam sebuah file, langkah kedua memutarnya kembali untuk mengotentikasi sesi baru.
  • 🧪 Waktu yang dihemat: Memutar ulang cookie sesi akan menghapus langkah-langkah login dari setiap kasus uji dan mempersingkat total waktu eksekusi.
  • ️ Tidak ada pengeditan: Cookie tidak dapat dimodifikasi secara langsung, jadi hapus cookie lama dan tambahkan salinan yang baru melalui Cookie.Builder.
  • ⚠️ Aturan domain: Kunjungi situs target sebelum memanggil addCookie, jika tidak, browser akan langsung menolak cookie tersebut.

Cara menangani cookie di Selenium webdriver

Cookie HTTP terdiri dari informasi tentang pengguna dan preferensi mereka. Cookie menyimpan informasi menggunakan pasangan kunci-nilai. Ini adalah sepotong kecil data yang dikirim dari aplikasi web dan disimpan di browser web, saat pengguna menjelajahi situs web tersebut.

Jika Anda masih baru mengenal topik ini, mulailah dengan panduan ini. pengujian kue.

Selenium Perintah Kueri untuk cookie

In Selenium Dengan WebDriver, kita dapat melakukan query dan berinteraksi dengan cookie menggunakan metode bawaan di bawah ini. Setiap metode tersebut diakses melalui driver.manage(), yang mengembalikan antarmuka Options.

Selenium Perintah Permintaan Keluaran
driver.manage().getCookies(); Mengembalikan daftar semua cookie
driver.manage().getCookieNamed(arg0); Mengembalikan cookie tertentu sesuai dengan namanya.
driver.manage().addCookie(arg0); Membuat dan menambahkan cookie
driver.manage().deleteCookie(arg0); Menghapus cookie tertentu
driver.manage().deleteCookieNamed(arg0); Menghapus cookie tertentu berdasarkan nama.
driver.manage().deleteAllCookies(); Menghapus semua cookie

Mengapa Menangani (Menerima) Cookies di Selenium?

Setiap cookie dikaitkan dengan nama, nilai, domain, jalur, kedaluwarsa, dan status aman atau tidak. Untuk memvalidasi klien, server mem-parsing semua nilai ini dalam cookie.

Ketika pengujian aplikasi web yang menggunakan Selenium WebDriver, Anda mungkin perlu membuat, memperbarui, atau menghapus cookie.

Sebagai contoh, saat mengotomatiskan toko online.ping Dalam aplikasi, Anda mungkin perlu mengotomatiskan skenario pengujian seperti melakukan pemesanan, melihat keranjang belanja, informasi pembayaran, konfirmasi pesanan, dan sebagainya.

Jika cookie tidak disimpan, Anda perlu melakukan tindakan login setiap kali sebelum menjalankan skenario pengujian yang tercantum di atas. Hal ini akan meningkatkan upaya pengkodean dan waktu eksekusi Anda.

Solusinya adalah menyimpan cookie dalam sebuah file. LaterAmbil nilai cookie dari file ini dan tambahkan ke sesi browser Anda saat ini. Hasilnya, Anda dapat melewati langkah-langkah login di setiap Kasus cobaan karena sesi pengemudi Anda memiliki informasi ini di dalamnya.

Server aplikasi sekarang memperlakukan sesi browser Anda sebagai terautentikasi dan langsung mengarahkan Anda ke halaman yang Anda minta. URL.

Cara Menangani Cookies di Selenium

Kami akan gunakan https://demo.guru99.com/test/cookie/selenium_aut.php untuk tujuan demo kami.

Ini akan menjadi proses 2 langkah.

Langkah 1) Masuk ke aplikasi dan simpan cookie otentikasi yang dihasilkan.

Aplikasi demo ini menampilkan formulir login sederhana seperti yang ditunjukkan di bawah ini.

Guru99 Selenium Formulir login demo cookie dengan kolom nama pengguna dan kata sandi.

Langkah 2) Gunakan cookie yang tersimpan untuk masuk kembali ke aplikasi tanpa menggunakan ID pengguna dan kata sandi.

Langkah 1) Menyimpan informasi 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();			
        }		
    }		
}

⚠️ Catatan versi: Baris System.setProperty dipertahankan persis seperti yang ditulis dalam tutorial aslinya. Dari Selenium 4.6 dan seterusnya, Selenium Manajer mengunduh dan mengkonfigurasi chromedriver yang sesuai secara otomatis, sehingga baris tersebut tidak lagi diperlukan pada pengaturan saat ini. Kode asli dibiarkan apa adanya di bawah ini dan masih dapat dikompilasi.

Code Penjelasan

  • Buat instance WebDriver.
  • Kunjungi situs web menggunakan driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • Masuk ke aplikasi.
  • Baca informasi cookie menggunakan
    driver.manage().getCookies();
  • Simpan informasi cookie menggunakan File.Writer kelas untuk menulis alur karakter, dan BufferedWriter untuk menulis teks ke dalam file bernama Cookies.data.
  • File Cookies.data menyimpan semua informasi cookie beserta nama, nilai, domain, dan jalurnya. Kita dapat mengambil informasi ini dan masuk ke aplikasi tanpa memasukkan kredensial login.

Setelah Anda menjalankan kode di atas, file Cookies.data akan dibuat di struktur folder proyek. Buka file tersebut dan Anda dapat melihat kredensial login AUT yang tersimpan dalam format cookie, seperti yang ditunjukkan pada tangkapan layar di bawah ini.

Isi file Cookies.data yang menampilkan cookie sesi yang tersimpan dalam format nama nilai domain jalur.

Langkah 2) Menggunakan cookie yang disimpan untuk login ke aplikasi

Sekarang, kita akan mengakses cookie yang dihasilkan pada langkah 1 dan menggunakannya untuk mengautentikasi sesi kita di aplikasi.

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");					
}	
	}	

Output: Anda akan langsung diarahkan ke layar login berhasil tanpa perlu memasukkan ID pengguna dan kata sandi.

CATATAN: Lakukan refresh paksa jika Anda melihat halaman login setelah menjalankan skrip di atas.

⚠️ Java catatan: Skrip pembaca menggunakan `new Boolean(String)` dan `new Date(String)`, yang keduanya sudah lama dihentikan penggunaannya oleh JDK. Pada JDK modern, padanannya adalah `Boolean.parseBoolean(token.nextToken())` dan parser `java.time`. Baris asli dipertahankan di atas; anggap catatan ini sebagai pengganti modern, bukan sebagai suntingan.

Atribut Cookie dan Selenium Kelas Kue

Kedua skrip di atas memindahkan enam field masuk dan keluar dari sebuah file. Field-field tersebut persis seperti yang diekspos oleh kelas org.openqa.selenium.Cookie, dan dengan mengetahuinya, loop tokenizer pada Langkah 2 akan jauh lebih mudah dibaca.

Atribut Aksesor Apa artinya
Nama getName () Kunci yang dicari oleh server, misalnya JSESSIONID.
Nilai getValue () Data yang tersimpan, biasanya berupa pengidentifikasi sesi.
Domain getDomain() Host tempat browser akan mengirimkan kembali cookie tersebut.
xtra getPath() The URL awalan yang berlaku untuk cookie tersebut.
Kadaluwarsa getExpiry() Tanggal berakhirnya masa berlaku cookie. Nilai null berarti cookie sesi.
Aman isSecure() Benar jika cookie hanya dikirim melalui HTTPS.
Hanya Http isHttpOnly() Benar ketika JavaSkrip pada halaman tidak dapat membaca cookie.
Situs yang sama getSameSite() Ketat, Longgar, atau Tidak Ada. Ditambahkan dalam Selenium 4.

Alih-alih konstruktor enam argumen yang digunakan pada Langkah 2, kode saat ini biasanya membangun cookie melalui kelas Builder internal, yang memungkinkan Anda hanya mengatur bidang yang Anda butuhkan.

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

driver.manage().addCookie(sessionCookie);

Satu aturan yang sering membingungkan banyak orang: objek cookie tidak dapat diedit setelah dibuat. Untuk mengubah nilai, Anda harus menghapus cookie lama dan menambahkan salinan yang baru, itulah sebabnya Builder sangat berguna.

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);

Kesalahan Umum pada Cookie Selenium WebDriver dan Cara Memperbaikinya

Kode cookie cenderung gagal dalam sejumlah kecil cara yang dapat diprediksi. Tabel di bawah ini mencantumkan kegagalan yang paling sering dilaporkan, beserta penyebab dan solusinya.

Gejala Menyebabkan Memperbaiki
Pengecualian Domain Cookie Tidak Valid Fungsi addCookie dipanggil sebelum menuju ke situs, jadi browser masih berada di about:blank. Panggil driver.get pada domain target terlebih dahulu, kemudian tambahkan cookie.
UnableToSetCookieException Domain cookie tidak sesuai dengan halaman yang sedang dimuat. Hilangkan kolom domain, atau atur ke host persis dari halaman yang dibuka.
Halaman login masih muncul setelah menambahkan cookie. Halaman tersebut ditampilkan sebelum cookie tersebut ada. Panggil driver.navigate().refresh(), yang merupakan maksud dari CATATAN di atas yang disebut sebagai refresh paksa.
getCookieNamed mengembalikan null Nama tersebut salah eja, atau cookie tersebut milik jalur atau subdomain yang berbeda. Ambil semua cookie menggunakan getCookies dan bandingkan namanya.
Cookie yang tersimpan akan ditolak pada eksekusi berikutnya. Waktu kedaluwarsa telah habis atau server telah mengakhiri sesi. Buat ulang file Cookies.data dengan menjalankan Langkah 1 lagi.

Jika browser terbuka dan berhasil melakukan autentikasi tetapi skrip gagal setelahnya, kemungkinan besar bukan cookie yang menjadi penyebabnya. Mari kita coba langkah-langkah selanjutnya. penanganan pengecualian dalam Selenium adalah rute tercepat dari titik itu, dan khusus Firefox profil adalah alternatif umum ketika Anda ingin data sesi tetap ada tanpa perlu file sama sekali.

Pertanyaan Umum Demo Slot

Ada dua pilihan. Klik tombol Terima seperti elemen lainnya, atau atur cookie persetujuan situs dengan addCookie sebelum memuat ulang agar banner tidak pernah ditampilkan. Pendekatan kedua lebih cepat dan menghilangkan sumber umum dari langkah awal yang tidak stabil.

Python Menggunakan padanan snake_case pada driver itu sendiri: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) dan driver.delete_all_cookies(). Cookie dikembalikan sebagai kamus (dictionary) dan bukan objek Cookie, jadi bacalah nilai dengan tanda kurung siku.

Ya. WebDriver berkomunikasi dengan browser melalui driver, bukan melalui JavaSkrip ini memungkinkan cookie HttpOnly terlihat melalui getCookies. Panggil isHttpOnly dan isSecure pada objek Cookie untuk memeriksa flag tersebut.

Kelompok analisis berbantuan AI yang gagal menganalisis sinyal yang sama dan seringkali tracKegagalan logout sesekali disebabkan oleh cookie sesi yang kedaluwarsa atau hilang. Beberapa alat juga mempelajari cookie mana yang dibawa oleh proses yang sedang berjalan dan memberikan peringatan ketika sesi menyimpang dari dasar tersebut.

Kopilot GitHub Meskipun menulis loop baca, tulis, dan pulih dengan cepat, kode ini sering kali mereproduksi konstruktor Boolean baru dan Date baru yang sudah usang. RevLihat setiap cuplikan yang dihasilkan dan bandingkan dengan yang saat ini Java ke Selenium Lebah.

Tidak. Cookie sesi adalah kredensial aktif, jadi file Cookies.data yang di-commit memungkinkan siapa pun yang memiliki akses ke repositori untuk meniru akun tersebut. Jauhkan file tersebut dari kontrol versi dan buat ulang sesuai dengan lingkungan yang Anda inginkan.

Tidak secara default. Setiap sesi dimulai dengan profil browser yang bersih, dan itulah sebabnya cookie ditulis ke disk dan diputar ulang. Melampirkan profil browser yang tersimpan adalah cara lain untuk menjaga sesi tetap aktif di antara beberapa kali penggunaan.

Cookie sesi membawa stempel waktu kedaluwarsa dan server juga tracks memiliki masa berlaku sesi sendiri. Setelah salah satu masa berlakunya berakhir, cookie yang diputar ulang akan ditolak dan halaman login akan kembali, jadi buatlah cookie baru yang tersimpan daripada menggunakan kembali file lama.

Ringkaslah postingan ini dengan: