كيفية التعامل مع ملفات تعريف الارتباط في Selenium ويب درايفر

⚡ ملخص ذكي

تخزن ملفات تعريف الارتباط تفضيلات المستخدم ومعرفات الجلسة على شكل أزواج مفتاح-قيمة، و Selenium يستطيع برنامج WebDriver قراءة هذه البيانات وحفظها وإعادة تشغيلها، بحيث يتخطى الاختبار الآلي شاشة تسجيل الدخول في كل عملية تشغيل لاحقة.

  • 🔘 أساسيات الكعك: تحتوي ملفات تعريف الارتباط على اسم وقيمة ونطاق ومسار وتاريخ انتهاء الصلاحية وعلامات الأمان و HttpOnly.
  • ☑️ ستة أوامر: تغطي عمليات getCookies و getCookieNamed و addCookie و deleteCookie و deleteCookieNamed و deleteAllCookies جميع العمليات.
  • عرض توضيحي من خطوتين: الخطوة الأولى هي كتابة ملف تعريف الارتباط الخاص بالمصادقة إلى ملف، والخطوة الثانية هي إعادة تشغيله لمصادقة جلسة جديدة.
  • 🧪 الوقت الموفر: تؤدي إعادة تشغيل ملف تعريف ارتباط الجلسة إلى إزالة خطوات تسجيل الدخول من كل حالة اختبار وتقصير وقت التنفيذ الإجمالي.
  • 🛠️ ممنوع التعديل: لا يمكن تعديل ملف تعريف الارتباط في مكانه، لذا احذف الملف القديم وأضف نسخة معاد بناؤها من خلال Cookie.Builder.
  • ⚠️ قاعدة النطاق: انتقل إلى الموقع المستهدف قبل استدعاء دالة addCookie، وإلا سيرفض المتصفح ملف تعريف الارتباط بشكل كامل.

كيفية التعامل مع ملفات تعريف الارتباط في Selenium ويب درايفر

ملف تعريف الارتباط HTTP عبارة عن معلومات حول المستخدم وتفضيلاته. يخزن هذه المعلومات باستخدام زوج من المفتاح والقيمة. وهو عبارة عن جزء صغير من البيانات يُرسل من تطبيق ويب ويُخزن في متصفح الويب أثناء تصفح المستخدم لهذا الموقع.

إذا كنت جديدًا في هذا الموضوع، فابدأ بهذا الدليل لـ اختبار ملفات تعريف الارتباط.

Selenium أوامر الاستعلام عن ملفات تعريف الارتباط

In Selenium باستخدام WebDriver، يمكننا الاستعلام عن ملفات تعريف الارتباط والتفاعل معها باستخدام الطرق المدمجة الموضحة أدناه. يتم الوصول إلى كل منها من خلال driver.manage()، الذي يُعيد واجهة Options.

Selenium أوامر الاستعلام الناتج
driver.manage().getCookies(); يُعيد قائمة بجميع ملفات تعريف الارتباط
driver.manage().getCookieNamed(arg0); يُعيد ملف تعريف ارتباط مُحددًا وفقًا للاسم
driver.manage().addCookie(arg0); يقوم بإنشاء وإضافة ملف تعريف الارتباط
driver.manage().deleteCookie(arg0); حذف ملف تعريف ارتباط محدد
driver.manage().deleteCookieNamed(arg0); يحذف ملف تعريف ارتباط محددًا وفقًا للاسم
driver.manage().deleteAllCookies(); يحذف جميع ملفات تعريف الارتباط

لماذا التعامل مع (قبول) ملفات تعريف الارتباط في Selenium?

يرتبط كل ملف تعريف ارتباط بالاسم والقيمة والمجال والمسار وانتهاء الصلاحية وحالة ما إذا كان آمنًا أم لا. من أجل التحقق من صحة العميل، يقوم الخادم بتوزيع كل هذه القيم في ملف تعريف الارتباط.

متى تجريب تطبيق ويب يستخدم Selenium في WebDriver، قد تحتاج إلى إنشاء ملف تعريف ارتباط أو تحديثه أو حذفه.

على سبيل المثال، عند أتمتة متجر إلكترونيping في التطبيق، قد تحتاج إلى أتمتة سيناريوهات الاختبار مثل تقديم الطلب، وعرض سلة التسوق، ومعلومات الدفع، وتأكيد الطلب، وما إلى ذلك.

إذا لم يتم تخزين ملفات تعريف الارتباط، فسيتعين عليك تسجيل الدخول في كل مرة قبل تنفيذ سيناريوهات الاختبار المذكورة أعلاه. سيؤدي ذلك إلى زيادة جهد البرمجة ووقت التنفيذ.

الحل هو تخزين ملفات تعريف الارتباط في ملف. Laterاسترجع قيم ملف تعريف الارتباط من هذا الملف وأضفها إلى جلسة المتصفح الحالية. ونتيجة لذلك، يمكنك تخطي خطوات تسجيل الدخول في كل مرة. حالة اختبار لأن جلسة برنامج التشغيل الخاصة بك تحتوي على هذه المعلومات.

يتعامل خادم التطبيق الآن مع جلسة المتصفح الخاصة بك على أنها مصادق عليها، وينقلك مباشرةً إلى ما طلبته. URL.

كيفية التعامل مع ملفات تعريف الارتباط في Selenium

سوف نستخدم https://demo.guru99.com/test/cookie/selenium_aut.php لغرضنا التجريبي.

ستكون هذه عملية من خطوتين.

الخطوة 1) قم بتسجيل الدخول إلى التطبيق واحفظ ملف تعريف الارتباط الخاص بالمصادقة الذي تم إنشاؤه.

يعرض التطبيق التجريبي نموذج تسجيل الدخول البسيط الموضح أدناه.

Guru99 Selenium نموذج تسجيل دخول تجريبي لملفات تعريف الارتباط مع حقول اسم المستخدم وكلمة المرور

الخطوة 2) استخدم ملف تعريف الارتباط المخزن لتسجيل الدخول إلى التطبيق مرة أخرى دون استخدام اسم المستخدم وكلمة المرور.

الخطوة 1) تخزين معلومات ملفات تعريف الارتباط

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

⚠️ ملاحظة حول الإصدار: تم الاحتفاظ بسطر System.setProperty كما هو مكتوب في الدليل التعليمي الأصلي. من Selenium ابتداءً من الإصدار 4.6، Selenium يقوم المدير بتنزيل وتكوين برنامج تشغيل Chrome المتوافق تلقائيًا، لذا لم يعد هذا السطر مطلوبًا في الإعداد الحالي. يبقى الكود الأصلي كما هو أدناه، ولا يزال قابلاً للتجميع.

Code تفسير

  • أنشئ مثيلًا لبرنامج تشغيل الويب (WebDriver).
  • قم بزيارة الموقع الإلكتروني باستخدام driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
  • تسجيل الدخول إلى التطبيق.
  • اقرأ معلومات ملف تعريف الارتباط باستخدام
    driver.manage().getCookies();
  • قم بتخزين معلومات ملفات تعريف الارتباط باستخدام الملفWriter فئة لكتابة سلاسل من الأحرف، و BufferedWriter لكتابة النص في ملف باسم Cookies.data.
  • يخزن ملف Cookies.data جميع معلومات ملفات تعريف الارتباط، بما في ذلك الاسم والقيمة والنطاق والمسار. يمكننا استرجاع هذه المعلومات وتسجيل الدخول إلى التطبيق دون الحاجة إلى إدخال بيانات اعتماد تسجيل الدخول.

بعد تشغيل الكود أعلاه، سيتم إنشاء ملف Cookies.data في بنية مجلد المشروع. افتح الملف وستجد بيانات اعتماد تسجيل الدخول الخاصة بالتطبيق قيد الاختبار محفوظة بتنسيق ملف تعريف الارتباط، كما هو موضح في الصورة المظللة أدناه.

محتويات ملف Cookies.data تُظهر ملف تعريف الارتباط الخاص بالجلسة المحفوظ بتنسيق اسم القيمة مسار النطاق

الخطوة 2) استخدام ملف تعريف الارتباط المخزن لتسجيل الدخول إلى التطبيق

الآن، سنقوم بالوصول إلى ملف تعريف الارتباط الذي تم إنشاؤه في الخطوة 1 واستخدامه لمصادقة جلستنا في التطبيق.

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

النتيجة: يتم نقلك مباشرة إلى شاشة نجاح تسجيل الدخول دون الحاجة إلى إدخال اسم المستخدم وكلمة المرور.

ملاحظة: استخدم خاصية التحديث الكامل للصفحة في حال ظهور صفحة تسجيل الدخول بعد تنفيذ البرنامج النصي أعلاه.

⚠️ Java ملاحظة: يستخدم برنامج القراءة الدالتين `new Boolean(String)` و`new Date(String)`، وهما دالتان توقف JDK عن استخدامهما منذ زمن. في JDK الحديث، تُستخدم الدالة `Boolean.parseBoolean(token.nextToken())` ومحلل `java.time` كمعادلات. تم الاحتفاظ بالسطور الأصلية أعلاه؛ لذا يُرجى اعتبار هذه الملاحظة بمثابة الاستبدال الحديث وليس تعديلاً.

سمات ملفات تعريف الارتباط و Selenium فئة ملفات تعريف الارتباط

يقوم النصان البرمجيان أعلاه بنقل ستة حقول من وإلى ملف. هذه الحقول هي بالضبط ما تعرضه فئة org.openqa.selenium.Cookie، ومعرفتها تجعل قراءة حلقة التجزئة في الخطوة 2 أسهل بكثير.

السمة الموصل ماذا تعني
الاسم getName () المفتاح الذي يبحث عنه الخادم، على سبيل المثال JSESSIONID.
بعد التخفيض الحصول على قيمة() البيانات المخزنة، وعادةً ما تكون مُعرّف الجلسة.
نطاق getDomain() المضيف الذي سيرسل إليه المتصفح ملف تعريف الارتباط مرة أخرى.
مسار getPath() استخدم URL البادئة التي ينطبق عليها ملف تعريف الارتباط.
تاريخ الإنتهاء getExpiry() تاريخ انتهاء صلاحية ملف تعريف الارتباط. القيمة الفارغة تعني ملف تعريف ارتباط الجلسة.
isSecure() صحيح عندما يتم إرسال ملف تعريف الارتباط عبر بروتوكول HTTPS فقط.
HttpOnly isHttpOnly() صحيح عندما Javaلا يمكن للبرنامج النصي الموجود على الصفحة قراءة ملف تعريف الارتباط.
نفس الموقع getSameSite() صارم، متساهل، أو لا شيء. تمت إضافته في Selenium 4.

بدلاً من المُنشئ ذي الوسائط الستة المستخدم في الخطوة 2، يقوم الكود الحالي عادةً بإنشاء ملف تعريف ارتباط من خلال فئة Builder الداخلية، والتي تتيح لك تعيين الحقول التي تهمك فقط.

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

driver.manage().addCookie(sessionCookie);

هناك قاعدة واحدة يغفل عنها معظم المستخدمين: لا يمكن تعديل ملف تعريف الارتباط بعد إنشائه. لتغيير قيمة، عليك حذف ملف تعريف الارتباط القديم وإضافة نسخة مُعاد إنشاؤها، وهذا ما يجعل أداة الإنشاء مفيدة للغاية.

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

أخطاء شائعة في ملفات تعريف الارتباط Selenium WebDriver وكيفية إصلاحها

عادةً ما تفشل أكواد ملفات تعريف الارتباط في عدد قليل من الطرق المتوقعة. يسرد الجدول أدناه أكثر الأخطاء شيوعًا، بالإضافة إلى السبب والحل.

عرض سبب حل
استثناء نطاق ملف تعريف الارتباط غير الصالح تم استدعاء دالة addCookie قبل الانتقال إلى الموقع، لذلك لا يزال المتصفح على صفحة about:blank. قم باستدعاء driver.get على النطاق المستهدف أولاً، ثم أضف ملف تعريف الارتباط.
استثناء تعذر تعيين ملف تعريف الارتباط نطاق ملف تعريف الارتباط لا يتطابق مع الصفحة المحملة حاليًا. قم بإسقاط حقل النطاق، أو قم بتعيينه إلى المضيف الدقيق للصفحة المفتوحة.
لا تزال صفحة تسجيل الدخول تظهر بعد إضافة ملف تعريف الارتباط تم عرض الصفحة قبل وجود ملف تعريف الارتباط. قم باستدعاء driver.navigate().refresh()، وهو ما تعنيه الملاحظة أعلاه بالتحديث الكامل.
تُرجع الدالة getCookieNamed قيمة فارغة (null). الاسم مكتوب بشكل خاطئ، أو أن ملف تعريف الارتباط ينتمي إلى مسار أو نطاق فرعي مختلف. قم بتفريغ جميع ملفات تعريف الارتباط باستخدام getCookies وقارن الأسماء.
يتم رفض ملف تعريف الارتباط المخزن في عملية تشغيل لاحقة انتهت صلاحية الجلسة أو قام الخادم بإنهاء الجلسة. أعد إنشاء ملف Cookies.data عن طريق تشغيل الخطوة 1 مرة أخرى.

إذا تم فتح المتصفح والمصادقة بنجاح، ولكن البرنامج النصي فشل بعد ذلك، فمن المحتمل ألا يكون ملف تعريف الارتباط هو السبب. العمل من خلال معالجة الاستثناءات في Selenium وهو الطريق الأسرع من تلك النقطة، ومخصص Firefox البيانات الشخصية يُعد هذا الخيار البديل المعتاد عندما تريد الاحتفاظ ببيانات الجلسة دون الحاجة إلى ملف على الإطلاق.

الأسئلة الشائعة

هناك خياران. انقر على زر "موافق" كأي عنصر آخر، أو قم بتعيين ملف تعريف ارتباط الموافقة للموقع باستخدام addCookie قبل إعادة التحميل حتى لا يظهر الإعلان أبدًا. الخيار الثاني أسرع ويتجنب أحد الأسباب الشائعة لعدم استقرار الخطوات الأولى.

Python يستخدم هذا الأمر مكافئات Snake_case في برنامج التشغيل نفسه: driver.get_cookies()، و driver.get_cookie(name)، و driver.add_cookie(dict)، و driver.delete_all_cookies(). تُعاد ملفات تعريف الارتباط على شكل قواميس بدلاً من كائنات Cookie، لذا اقرأ القيم باستخدام الأقواس المربعة.

نعم. يتواصل WebDriver مع المتصفح من خلال برنامج التشغيل وليس من خلال Javaباستخدام البرنامج النصي، يمكن رؤية ملفات تعريف الارتباط HttpOnly عبر getCookies. استدعِ الدالتين isHttpOnly و isSecure على كائن ملف تعريف الارتباط لفحص هذه العلامات.

تفشل مجموعات التحليل المدعومة بالذكاء الاصطناعي في عمليات التشغيل بسبب الإشارات المشتركة، وغالبًا ما tracقد تُعزى حالات فشل تسجيل الخروج المتقطعة إلى انتهاء صلاحية ملف تعريف ارتباط الجلسة أو فقدانه. كما تتعرف بعض الأدوات على ملفات تعريف الارتباط التي يحملها كل تشغيل، وتُصدر تحذيراً عند انحراف الجلسة عن هذا الأساس.

مساعد الطيار جيثب يكتب حلقات القراءة والكتابة والاستعادة بسرعة، ولكنه يعيد إنتاج منشئي القيم المنطقية الجديدة ومنشئي التاريخ الجديدة المهملة بشكل متكرر. Revقم بمراجعة كل جزء تم إنشاؤه مقابل الجزء الحالي Java و Selenium واجهات برمجة التطبيقات.

لا. ملف تعريف الارتباط الخاص بالجلسة هو بيانات اعتماد فعّالة، لذا فإن ملف Cookies.data المُثبّت يسمح لأي شخص لديه صلاحية الوصول إلى المستودع بانتحال هوية ذلك الحساب. احتفظ بالملف خارج نظام التحكم في الإصدارات وأعد إنشائه لكل بيئة.

ليس افتراضيًا. تبدأ كل جلسة بملف تعريف متصفح جديد، ولهذا السبب تحديدًا يتم حفظ ملف تعريف الارتباط على القرص وإعادة استخدامه. يُعدّ إرفاق ملف تعريف متصفح محفوظ طريقة أخرى للحفاظ على استمرارية الجلسة بين عمليات التشغيل.

تحتوي ملفات تعريف الارتباط الخاصة بالجلسة على طابع زمني لانتهاء الصلاحية، وكذلك الخادم. tracيحتفظ كل ملف تعريف ارتباط بفترة صلاحية خاصة به. بمجرد انتهاء صلاحية أي منهما، يتم رفض ملف تعريف الارتباط المُعاد استخدامه وتعود صفحة تسجيل الدخول، لذا يُنصح بإعادة إنشاء ملف تعريف الارتباط المخزن بدلاً من إعادة استخدام ملف قديم.

تلخيص هذه التدوينة بـ: