Çerezlerin Nasıl Kullanılacağı Selenium Web Sürücüsü

⚡ Akıllı Özet

Çerezler, kullanıcı tercihlerini ve oturum tanımlayıcılarını anahtar-değer çiftleri olarak saklar ve Selenium WebDriver bunları okuyabilir, kaydedebilir ve tekrar oynatabilir, böylece otomatik bir test her sonraki çalıştırmada giriş ekranını atlar.

  • 🔘 Çerezlerin temel bilgileri: Çerezler ad, değer, etki alanı, yol, son kullanma tarihi ve güvenli ile HttpOnly bayraklarını içerir.
  • ☑️ Altı komut: getCookies, getCookieNamed, addCookie, deleteCookie, deleteCookieNamed ve deleteAllCookies fonksiyonları her işlemi kapsar.
  • ✅ İki aşamalı gösterim: Birinci adımda kimlik doğrulama çerezi bir dosyaya yazılır, ikinci adımda ise yeni bir oturumu doğrulamak için bu çerez tekrar kullanılır.
  • 🧪 Zamandan tasarruf: Oturum çerezini yeniden kullanmak, her test senaryosundan oturum açma adımlarını kaldırır ve toplam yürütme süresini kısaltır.
  • ️ Düzenleme yok: Çerezler yerinde değiştirilemez, bu nedenle eski çerezi silin ve Cookie.Builder aracılığıyla yeniden oluşturulmuş bir kopyasını ekleyin.
  • ⚠️ Alan kuralı: addCookie fonksiyonunu çağırmadan önce hedef siteye gidin, aksi takdirde tarayıcı çerezi doğrudan reddeder.

Çerezlerle nasıl başa çıkılır? Selenium Web Sürücüsü

HTTP çerezleri, kullanıcı ve tercihleri ​​hakkında bilgilerden oluşur. Anahtar-değer çifti kullanarak bilgi depolar. Kullanıcı web sitesinde gezinirken, web uygulamasından gönderilen ve web tarayıcısında saklanan küçük bir veri parçasıdır.

Konuya yeni başlıyorsanız, bu kılavuzla başlayın. çerez testi.

Selenium Çerezler için Sorgu Komutları

In Selenium WebDriver ile, aşağıdaki yerleşik yöntemleri kullanarak çerezleri sorgulayabilir ve bunlarla etkileşim kurabiliriz. Bunların her birine, Options arayüzünü döndüren driver.manage() aracılığıyla ulaşılır.

Selenium Sorgu Komutları Çıktı
sürücü.yönetim().çerezlerial(); Tüm çerezlerin listesini döndürür.
sürücü.yönetim().getCookieNamed(arg0); İsme göre belirli bir çerez döndürür.
sürücü.yönetim().addCookie(arg0); Çerezi oluşturur ve ekler.
sürücü.yönetim().çerezleri sil(arg0); Belirli bir çerezi siler.
sürücü.yönetim().arg0'dakiÇerezAdınıSil(arg0); Belirtilen ada göre belirli bir çerezi siler.
sürücü.yönetim().tümÇerezleriSil(); Tüm çerezleri siler.

Çerezleri Neden İşleme (Kabul Etme) Selenium?

Her çerez bir ad, değer, etki alanı, yol, son kullanma tarihi ve güvenli olup olmadığına ilişkin durumla ilişkilendirilir. Bir istemciyi doğrulamak için sunucu tüm bu değerleri bir çerezde ayrıştırır.

Ne zaman test yapmak kullanan bir web uygulaması Selenium WebDriver kullanırken çerez oluşturmanız, güncellemeniz veya silmeniz gerekebilir.

Örneğin, çevrimiçi bir mağazayı otomatikleştirirkenping Uygulamanızda, sipariş verme, sepeti görüntüleme, ödeme bilgilerini alma, sipariş onaylama vb. gibi test senaryolarını otomatikleştirmeniz gerekebilir.

Çerezler saklanmazsa, yukarıda listelenen test senaryolarını çalıştırmadan önce her seferinde oturum açma işlemini gerçekleştirmeniz gerekecektir. Bu, kodlama çabanızı ve yürütme sürenizi artıracaktır.

Çözüm, çerezleri bir dosyada saklamaktır. LaterBu dosyadan çerez değerlerini alıp mevcut tarayıcı oturumunuza ekleyin. Sonuç olarak, her seferinde giriş adımlarını atlayabilirsiniz. test durumu çünkü sürücü oturumunuz bu bilgiyi içeriyor.

Uygulama sunucusu artık tarayıcı oturumunuzu doğrulanmış olarak kabul ediyor ve sizi doğrudan istediğiniz sayfaya yönlendiriyor. URL.

Çerezlerin Nasıl Kullanılacağı Selenium

Kullanacağız https://demo.guru99.com/test/cookie/selenium_aut.php demo amacımız için.

Bu 2 adımlı bir süreç olacak.

Adım 1) Uygulamaya giriş yapın ve oluşturulan kimlik doğrulama çerezini saklayın.

Demo uygulaması, aşağıda gösterilen sade giriş formunu sunmaktadır.

Guru99 Selenium Kullanıcı adı ve şifre alanları içeren çerez demo giriş formu

Adım 2) Kaydedilen çerezi kullanarak, kullanıcı kimliği ve şifre kullanmadan uygulamaya tekrar giriş yapın.

Adım 1) Çerez bilgilerinin saklanması

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

⚠️ Sürüm notu: System.setProperty satırı, orijinal eğitimde yazıldığı gibi aynen korunmuştur. Selenium 4.6 sonrası, Selenium Yönetici, uygun chromedriver'ı otomatik olarak indirir ve yapılandırır, bu nedenle mevcut bir kurulumda bu satıra artık gerek yoktur. Orijinal kod aşağıda olduğu gibi bırakılmıştır ve hala derlenmektedir.

Code açıklama

  • Bir WebDriver örneği oluşturun.
  • driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”) komutunu kullanarak web sitesini ziyaret edin.
  • Uygulamaya giriş yapın.
  • Çerez bilgilerini kullanarak okuyun
    driver.manage().getCookies();
  • Çerez bilgilerini Dosya kullanarak saklayın.Writer Karakter dizileri yazmak için ders ve BufferedWriter Metni Cookies.data adlı bir dosyaya yazmak.
  • Cookies.data dosyası, ad, değer, etki alanı ve yol bilgileriyle birlikte tüm çerez bilgilerini saklar. Bu bilgilere erişerek, giriş bilgilerini girmeden uygulamaya giriş yapabiliriz.

Yukarıdaki kodu çalıştırdığınızda, proje klasör yapısında Cookies.data dosyası oluşturulur. Dosyayı açtığınızda, aşağıdaki vurgulanmış ekran görüntüsünde gösterildiği gibi, test edilen uygulamanın giriş bilgilerinin çerez biçiminde kaydedildiğini görebilirsiniz.

Cookies.data dosyasının içeriği, kaydedilen oturum çerezini ad, değer, etki alanı, yol biçiminde göstermektedir.

Adım 2) Uygulamaya giriş yapmak için saklanan çerezin kullanılması

Şimdi, 1. adımda oluşturulan çereze erişeceğiz ve onu uygulamadaki oturumumuzu doğrulamak için kullanacağız.

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

Çıktı: Kullanıcı adı ve şifre girmeden doğrudan giriş başarı ekranına yönlendirilirsiniz.

NOT: Yukarıdaki komutu çalıştırdıktan sonra giriş sayfasını görürseniz, sayfayı yeniden yükleyin.

⚠️ Java not: Okuyucu betiği, JDK'nın uzun zaman önce kullanımdan kaldırdığı `new Boolean(String)` ve `new Date(String)` yöntemlerini kullanıyor. Modern bir JDK'da bunların karşılıkları `Boolean.parseBoolean(token.nextToken())` ve `java.time` ayrıştırıcısıdır. Orijinal satırlar yukarıda korunmuştur; notu bir düzenleme olarak değil, modern bir alternatif olarak değerlendirin.

Çerez Özellikleri ve Selenium Çerez Sınıfı

Yukarıdaki iki komut dosyası, bir dosyadan altı alanı içeri ve dışarı taşır. Bu alanlar, org.openqa.selenium.Cookie sınıfının sunduğu alanlarla tamamen aynıdır ve bunları bilmek, 2. Adımdaki belirteçleme döngüsünü çok daha kolay okunabilir hale getirir.

özellik Erişimci Ne demek
İsim getName () Sunucunun aradığı anahtar, örneğin JSESSIONID.
Özellik Değer elde etmek() Saklanan veri, genellikle oturum tanımlayıcısıdır.
domain getDomain () Tarayıcının çerezi geri göndereceği sunucu.
Yol getPath () MKS URL Çerezin uygulandığı ön ek.
vade getExpiry() Çerezin geçerlilik süresinin sona erdiği tarih. Boş değer, oturum çerezini ifade eder.
Güvenli isSecure() Çerez yalnızca HTTPS üzerinden gönderildiğinde doğrudur.
HttpOnly isHttpOnly() Doğru olduğunda JavaSayfadaki komut dosyası çerezi okuyamıyor.
AynıSite getSameSite() Sıkı, Gevşek veya Hiçbiri. Eklendi Selenium 4.

2. adımda kullanılan altı argümanlı kurucu yerine, mevcut kod genellikle yalnızca ilgilendiğiniz alanları ayarlamanıza olanak tanıyan iç Builder sınıfı aracılığıyla bir çerez oluşturur.

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

driver.manage().addCookie(sessionCookie);

Çoğu insanı yanıltan bir kural var: Çerez nesnesi oluşturulduktan sonra düzenlenemez. Bir değeri değiştirmek için eski çerezi silmeniz ve yeniden oluşturulmuş bir kopyasını eklemeniz gerekir; bu nedenle Builder çok kullanışlıdır.

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

Çerezlerle İlgili Sık Karşılaşılan Hatalar Selenium WebDriver ve Sorunları Nasıl Çözersiniz

Çerez kodları genellikle az sayıda ve tahmin edilebilir şekilde başarısız olur. Aşağıdaki tabloda en sık bildirilen hatalar, nedenleri ve çözümleri listelenmiştir.

Semptom Sebeb olmak sabit
Geçersiz ÇerezAlanİstisnası addCookie, siteye gitmeden önce çağrıldı, bu nedenle tarayıcı hala about:blank sayfasında. Öncelikle hedef etki alanında driver.get'i çağırın, ardından çerezi ekleyin.
UnableToSetCookieException Çerez alan adı, şu anda yüklenmiş olan sayfayla eşleşmiyor. Alan adı alanını silin veya açılan sayfanın tam sunucu adresini girin.
Çerez eklendikten sonra bile giriş sayfası hala görünüyor. Sayfa, çerez oluşturulmadan önce oluşturulmuştu. Yukarıdaki NOT'ta "zorunlu yenileme" olarak belirtilen işlem, driver.navigate().refresh() çağrısıdır.
getCookieNamed null değer döndürüyor İsim yanlış yazılmış veya çerez farklı bir yola veya alt alana ait. getCookies fonksiyonu ile tüm çerezleri listeleyip isimlerini karşılaştırın.
Kaydedilen çerez daha sonraki çalıştırmada reddedilir. Süre doldu veya sunucu oturumu sonlandırdı. Cookies.data dosyasını yeniden oluşturmak için 1. adımı tekrar çalıştırın.

Tarayıcı açılıp doğru şekilde kimlik doğrulaması yaptıktan sonra komut dosyası başarısız olursa, muhtemelen sorun çerezde değildir. Sorunu çözmek için şu adımları izleyin: istisna işleme Selenium Bu noktadan itibaren daha hızlı bir rota ve özel bir hat bulunmaktadır. Firefox profil Oturum verilerinin dosya olmadan da saklanmasını istediğinizde genellikle tercih edilen yöntem budur.

SSS

İki seçenek var. Herhangi bir öğe gibi Kabul Et düğmesine tıklayın veya banner'ın asla görüntülenmemesi için sayfayı yeniden yüklemeden önce addCookie ile sitenin onay çerezini ayarlayın. İkinci yaklaşım daha hızlıdır ve ilk adımlarda sık karşılaşılan sorunlu bir nedeni ortadan kaldırır.

Python Sürücü üzerinde snake_case eşdeğerlerini kullanır: driver.get_cookies(), driver.get_cookie(name), driver.add_cookie(dict) ve driver.delete_all_cookies(). Çerezler Cookie nesneleri yerine sözlükler olarak döndürülür, bu nedenle değerleri köşeli parantez içinde okuyun.

Evet. WebDriver, tarayıcıyla sürücü üzerinden iletişim kurar, doğrudan sürücü üzerinden değil. JavaBu betik sayesinde HttpOnly çerezleri getCookies aracılığıyla görülebilir. Bu işaretleri incelemek için Cookie nesnesi üzerinde isHttpOnly ve isSecure yöntemlerini çağırın.

Yapay zeka destekli analiz grupları, paylaşılan sinyaller nedeniyle başarısız olan çalışmaları sıklıkla tespit eder. tracAra sıra yaşanan oturum kapatma hataları, süresi dolmuş veya eksik oturum çerezinden kaynaklanabilir. Bazı araçlar ayrıca, başarılı bir çalıştırmanın hangi çerezleri taşıdığını öğrenir ve bir oturum bu temel çizgiden saparsa uyarı verir.

GitHub Yardımcı Pilotu Okuma, yazma ve geri yükleme döngülerini hızlı bir şekilde yazıyor, ancak sıklıkla kullanımdan kaldırılmış olan `new Boolean` ve `new Date` yapıcılarını yeniden üretiyor. RevOluşturulan her kod parçasını mevcut kod parçasıyla karşılaştırın. Java hem de Selenium API'leri.

Hayır. Oturum çerezi canlı bir kimlik bilgisi olduğundan, kaydedilmiş bir Cookies.data dosyası, depoya erişimi olan herkesin o hesabı taklit etmesine olanak tanır. Dosyayı sürüm kontrolünün dışında tutun ve her ortam için yeniden oluşturun.

Varsayılan olarak değil. Her oturum temiz bir tarayıcı profiliyle başlar; bu nedenle çerez diske yazılır ve tekrar oynatılır. Kaydedilmiş bir tarayıcı profilini eklemek, oturumu çalıştırmalar arasında canlı tutmanın diğer yoludur.

Oturum çerezleri bir son kullanma zaman damgası taşır ve sunucu da aynı şekilde bu bilgiyi saklar. tracÇerezlerin her ikisinin de kendi oturum ömrü vardır. Bu sürelerden herhangi biri sona erdiğinde, yeniden oynatılan çerez reddedilir ve giriş sayfası geri döner; bu nedenle eski bir dosyayı yeniden kullanmak yerine saklanan çerezi yeniden oluşturun.

Bu yazıyı şu şekilde özetleyin: