كيفية رفع وتنزيل ملف باستخدام Selenium

⚡ ملخص ذكي

قم بتحميل وتنزيل الملف باستخدام Selenium تعتمد عمليات سير عمل WebDriver على وظيفة sendKeys() الأصلية لحقول الإدخال، وAutoIt أو Robot للحوارات، وأوامر CDP في Selenium 4- تحديد مسارات التنزيل الآمنة أثناء عمليات التشغيل الآلي.

  • 📤 طريقة التحميل: استخدم الدالة sendKeys() على عنصر إدخال الملف لدفع مسار الملف المطلق دون النقر على "استعراض".
  • 📥 مسار التنزيل: قم بتكوين دليل تنزيل مخصص من خلال ChromeOptions أو CDP Page.setDownloadBehavior في Selenium 4.
  • 🪟 الحوارات الأصلية: قم بتشغيل نصوص AutoIt أو java.awt.Robot عندما يمنع منتقي ملفات نظام التشغيل WebDriver من التفاعل.
  • 🤖 مساعدة الذكاء الاصطناعي: يقترح الذكاء الاصطناعي التوليدي المحددات، ويبني ملفات بيانات الاختبار، ويتحقق من سلامة الملفات التي تم تنزيلها تلقائيًا.
  • 🛡️ التحقق من الصحة: تأكد من نجاح التحميل من خلال رسائل الاستجابة، وتحقق من التنزيلات باستخدام حجم الملف أو مقارنة المجموع الاختباري.

كيفية رفع وتنزيل ملف باستخدام Selenium

يتم تحميل الملفات في WebDriver ببساطة عن طريق استخدام دالة sendKeys() في حقل إدخال اختيار الملف لإدخال مسار الملف المراد تحميله. في هذا الدرس، ستتعلم كيفية التعامل مع عمليات تحميل وتنزيل الملفات باستخدام Selenium برنامج تشغيل الويب.

كيفية رفع الملف في Selenium

في هذا القسم سوف نستخدم https://demo.guru99.com/test/upload/ كما تطبيق الاختبار لدينا. يسمح هذا الموقع بسهولة لأي زائر بتحميل الملفات دون الحاجة إلى التسجيل.

تحميل الملف في Selenium
التعامل مع النافذة المنبثقة لتحميل الملف Selenium برنامج تشغيل الويب

لنفترض أننا نرغب في تحميل الملف "C:\newhtml.html". يجب أن يكون رمز WebDriver الخاص بنا مثل الرمز الموضح أدناه.

صفقة مشروع جديد؛
استيراد org.openqa.selenium.*;
استيراد org.openqa.selenium.firefox.Firefoxالسائقين؛
الطبقة العامة PG9 {
الفراغ الساكن العام رئيسي(خيط[] args) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
خيط baseUrl = "https://demo.guru99.com/test/upload/";
ويب درايفر السائق = جديد Firefoxالسائق();

driver.get(baseUrl);
عنصر الويب uploadElement = driver.findElement(By.id("uploadfile_0"))؛

// أدخل مسار الملف في حقل إدخال اختيار الملف
uploadElement.sendKeys("C:\\newhtml.html");

// ضع علامة في مربع "أوافق على شروط الخدمة"
driver.findElement(By.id("مصلحات")).click();

// انقر على زر "تحميل الملف"
driver.findElement(By.name("يرسل")).click();
}
}

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

تحميل الملف في Selenium

تذكر الأمرين التاليين عند تحميل الملفات في WebDriver:

  1. لا حاجة لمحاكاة النقر على زر "استعراض". يقوم WebDriver تلقائيًا بإدخال مسار الملف في مربع نص اختيار الملف الخاص بـ عنصر.
  2. عند تحديد مسار الملف في ملف Java IDE، استخدم حرف الهروب المناسب للشرطة المائلة الخلفية.

تحميل الملف في Selenium

التعامل مع مربعات حوار التحميل غير المدخلة باستخدام AutoIt

عندما تستخدم الصفحة زر تصفح مخصص بدلاً من زر أصلي لا تعمل الدالة sendKeys() في العنصر. في هذه الحالة، يمكنك استدعاء برنامج AutoIt النصي من Selenium اكتب مسار الملف في مربع حوار نظام التشغيل واضغط على مفتاح الإدخال (Enter).

احفظ البرنامج النصي أدناه باسم upload.au3قم بتجميعها إلى تحميل.exeثم استدعه من Java بعد النقر على زر التصفح.

; upload.au3 – ينتظر ظهور مربع حوار "فتح" ثم يكتب مسار الملف
WinWaitActive("افتح")
يرسل("C:\newhtml.html")
يرسل("{يدخل}")

من Javaقم بتشغيل المساعد بعد النقر على زر التصفح:

driver.findElement(By.id(زر التصفح)).click();
وقت التشغيل.getRuntime().exec("C:\\AutoIt\\upload.exe");

فئة java.awt.Robot هي فئة نقية-Java بديل عند عدم توفر AutoIt، على الرغم من أن AutoIt أكثر موثوقية على Windows لأنه ينتظر ظهور الحوار من خلال العنوان.

كيفية تنزيل ملف في Selenium برنامج تشغيل الويب

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

ما هو وجت؟

Wget هو برنامج سطر أوامر صغير وسهل الاستخدام يستخدم لأتمتة التنزيلات. في الأساس، سوف نقوم بالوصول إلى Wget من برنامج WebDriver النصي الخاص بنا لإجراء عملية التنزيل.

إعداد Wget

الخطوة 1) في محرك الأقراص C، قم بإنشاء مجلد جديد وقم بتسميته باسم "Wget".

تحميل wget.exe من هنا ثم ضعه في مجلد Wget الذي أنشأته في الخطوة السابقة.

إعداد Wget

الخطوة 2) افتح برنامج التشغيل بالضغط على Windows مفتاح + "R"؛ اكتب "cmd" وانقر فوق موافق.

إعداد Wget

اكتب الأمر "cd /" للانتقال إلى الدليل الجذر.

إعداد Wget

الخطوة 3) اكتب الأمر للتحقق مما إذا كان الإعداد المحدد يعمل.

cmd /c C:\\Wget\\wget.exe -PC: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

إعداد Wget

يبدو أن هناك مشكلة في الكتابة على محرك الأقراص C.

الخطوة 4) يجب عليك تصحيح أخطاء wget في سطر الأوامر قبل تنفيذ الكود باستخدام Selenium WebDriver. ستستمر هذه الأخطاء في Eclipse ولن تكون رسائل الخطأ مفيدة بالقدر الكافي. من الأفضل تشغيل wget أولاً باستخدام سطر الأوامر. إذا نجح الأمر في سطر الأوامر، فسيعمل بالتأكيد في Eclipse.

في مثالنا، كما هو موضح في الخطوة 3، توجد مشكلة في الكتابة إلى محرك الأقراص C. لنغير موقع التنزيل إلى محرك الأقراص D ونتحقق من النتائج.

cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

إعداد Wget

Messenger تم تحميله بنجاح.

قبل المتابعة، لا تنس حذف الملف الذي تم تنزيله.

باستخدام WebDriver وWget

في المثال التالي، سنستخدم WebDriver وwget لتنزيل برنامج دردشة شهير يسمى Yahoo Messengerقاعدتنا URL يجب أن تكون https://demo.guru99.com/test/yahoo.html.

باستخدام WebDriver وWget

الخطوة 1) قم باستيراد الحزمة "java.io.IOException" لأنه سيتعين علينا التقاط IOException لاحقًا في الخطوة 4.

باستخدام WebDriver وWget

الخطوة 2) استخدم الدالة getAttribute() للحصول على قيمة "href" لرابط التنزيل وحفظها كمتغير نصي. في هذه الحالة، سمينا المتغير "sourceLocation".

باستخدام WebDriver وWget

الخطوة 3) قم بإعداد صيغة wget باستخدام الأمر التالي.

باستخدام WebDriver وWget

الخطوة 4) ابدأ عملية التنزيل عن طريق الاتصال بـ wget من رمز WebDriver الخاص بنا.

باستخدام WebDriver وWget

لتلخيص كل ذلك، يمكن أن يبدو رمز WebDriver الخاص بك كما هو موضح أدناه.

صفقة مشروع جديد؛
استيراد java.io.IOException ؛

استيراد org.openqa.selenium.*;
استيراد org.openqa.selenium.firefox.Firefoxالسائقين؛
الطبقة العامة PG8 {
الفراغ الساكن العام رئيسي(خيط[] args) {

System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
خيط baseUrl = "https://demo.guru99.com/test/yahoo.html";
ويب درايفر السائق = جديد Firefoxالسائق();

driver.get(baseUrl);
عنصر الويب downloadButton = driver.findElement(By.id("تنزيل الرسائل"))؛
خيط sourceLocation = downloadButton.getAttribute("href");
خيط أمر wget = "cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate " + موقع المصدر؛

محاولة {
طريقة عملنا exec = Runtime.getRuntime().exec(wget_command);
مادبا exitVal = exec.waitFor();
System.out.println ("قيمة الخروج: " + exitVal)؛
} قبض (InterruptException | IOEException السابق) {
System.out.println(ex.toString());
}
driver.close();
}
}

بعد تنفيذ هذا الرمز، تحقق من محرك الأقراص D الخاص بك وتأكد من أن ملف Yahoo Messenger تم تنزيل برنامج التثبيت هناك بنجاح.

باستخدام WebDriver وWget

تحديد مسار تنزيل مخصص باستخدام Selenium 4 CDP

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

ChromeDriver السائق = جديد ChromeDriver () ،
خريطة<خيط,هدف> المعلمات = جديد HashMap<>();
params.put("سلوك", "السماح");
params.put("downloadPath", "D:\\selenium-downloads");
driver.executeCdpCommand("Page.setDownloadBehavior"، المعاملات)؛
driver.get("https://demo.guru99.com/test/yahoo.html");
driver.findElement(By.id("تنزيل الرسائل")).click();

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

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

Selenium يستدعي الدالة sendKeys() على عنصر يحتوي على مسار الملف المطلق. يقوم المتصفح بملء الحقل مباشرةً، لذا لا يتم فتح منتقي الملفات في نظام التشغيل ولا حاجة للنقر على "استعراض".

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

قم باستدعاء executeCdpCommand(“Page.setDownloadBehavior”, params) مع ضبط السلوك على السماح وتعيين downloadPath إلى مجلدك. Selenium 4 يقوم بتوجيه الأمر إلى أدوات مطوري Chrome ويتم تخطي مطالبة "حفظ باسم".

نعم. يقوم مساعدو الذكاء الاصطناعي بقراءة نموذج التحميل الخاص بك، واقتراح المحددات، وإنشاء ملفات حدودية مثل العينات الفارغة أو كبيرة الحجم أو ذات الامتداد الخاطئ، وكتابة كتلة sendKeys(). هذا يقلل من وقت الإعداد ويكشف عن الحالات الشاذة التي غالبًا ما يغفل عنها المختبرون البشريون.

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

يتجاوز برنامج Wget المتصفح تمامًا ويحفظ الملف مباشرةً على القرص من خلال عملية سطر الأوامر. وهو مفيد على الأنظمة القديمة. Selenium 2 أو 3 إعدادات حيث لا تتوفر تفضيلات تنزيل CDP و ChromeOptions.

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