كيفية التعامل مع ملفات تعريف الارتباط في Selenium ويب درايفر
⚡ ملخص ذكي
تخزن ملفات تعريف الارتباط تفضيلات المستخدم ومعرفات الجلسة على شكل أزواج مفتاح-قيمة، و Selenium يستطيع برنامج WebDriver قراءة هذه البيانات وحفظها وإعادة تشغيلها، بحيث يتخطى الاختبار الآلي شاشة تسجيل الدخول في كل عملية تشغيل لاحقة.
ملف تعريف الارتباط 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) قم بتسجيل الدخول إلى التطبيق واحفظ ملف تعريف الارتباط الخاص بالمصادقة الذي تم إنشاؤه.
يعرض التطبيق التجريبي نموذج تسجيل الدخول البسيط الموضح أدناه.
الخطوة 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 في بنية مجلد المشروع. افتح الملف وستجد بيانات اعتماد تسجيل الدخول الخاصة بالتطبيق قيد الاختبار محفوظة بتنسيق ملف تعريف الارتباط، كما هو موضح في الصورة المظللة أدناه.
الخطوة 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 البيانات الشخصية يُعد هذا الخيار البديل المعتاد عندما تريد الاحتفاظ ببيانات الجلسة دون الحاجة إلى ملف على الإطلاق.


