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


