كيفية الضغط على الصورة في Selenium برنامج تشغيل الويب

⚡ ملخص ذكي

انقر على الصورة في Selenium يتطلب WebDriver استخدام مُحدِّدات CSS أو استراتيجيات XPath لأن عناصر الصور لا تعرض نص الرابط. تشرح هذه المقالة كيفية تحديد موقع الصورة، وتفعيل إجراء النقر، والتحقق من نجاح عملية التنقل.

  • 🖱️ الإجراء الأساسي: استخدم driver.findElement(By.cssSelector(…)).click() لتنفيذ نقرة على أي عنصر صورة يتم عرضه داخل رابط.
  • 🎯 اختيار الموقع: لا تعمل خاصيتا By.linkText و By.partialLinkText مع الصور، لذا فإن استخدام By.cssSelector أو By.xpath ضروري.
  • 🧪 خطوة التحقق: تأكد من نجاح النقر عن طريق التحقق من عنوان الصفحة الجديد باستخدام driver.getTitle() مقابل سلسلة الوجهة المتوقعة.
  • 🤖 مساعدة الذكاء الاصطناعي: تقترح إضافات الذكاء الاصطناعي الحديثة محددات CSS مستقرة ومحددات إصلاح تلقائي عند تغيير ترميز التطبيق أو قيم السمات.
  • 🛠️ المخاطر المشتركة: غالباً ما تتطلب الصور المخفية أو التي يتم تحميلها عند الحاجة أو المتداخلة فترات انتظار صريحة أو تمريراً لعرضها، أو Javaانقر على البرنامج النصي للتسجيل بشكل صحيح.

انقر على الصورة في Selenium

النقر على صورة في Selenium يُعدّ WebDriver مهمة شائعة عندما تعمل أيقونة أو شعار أو صورة مصغّرة كرابط تنقل. ولأنّ الصور لا تحتوي على نص مرئي، فإنّ محددات نص الرابط التقليدية تفشل، ما يستدعي استخدام استراتيجية تحديد أكثر موثوقية.

الوصول إلى روابط الصور

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

لأنها صور، لا يمكننا استخدام طريقتي By.linkText() و By.partialLinkText() لأن روابط الصور لا تحتوي على نص رابط على الإطلاق.

في هذه الحالة، ينبغي اللجوء إلى استخدام إما By.cssSelector أو By.xpath. ويُفضّل عمومًا استخدام الطريقة الأولى لبساطتها وسهولة قراءتها.

في المثال أدناه، سنصل إلى شعار "Facebook" الموجود في الجزء العلوي الأيسر من صفحة استرداد كلمة المرور الخاصة بـ Facebook.

الوصول إلى روابط الصور

سنستخدم By.cssSelector وسمة "title" للعنصر للوصول إلى رابط الصورة. ثم سنتحقق من أن المتصفح قد تم توجيهه إلى الصفحة الرئيسية لفيسبوك.

Java Code مثال

ما يلي Selenium يقوم جزء WebDriver بتشغيل متصفح Chrome، وفتح صفحة استعادة كلمة مرور Facebook، والنقر على صورة شعار Facebook، والتحقق من عنوان الصفحة الناتج.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MyClass {

    public static void main(String[] args) {
        String baseUrl = "https://www.facebook.com/login/identify?ctx=recover";
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        // click on the "Facebook" logo on the upper left portion
        driver.findElement(By.cssSelector("a[title=\"Go to Facebook home\"]")).click();

        // verify that we are now back on Facebook's homepage
        if (driver.getTitle().equals("Facebook - log in or sign up")) {
            System.out.println("We are back at Facebook's homepage");
        } else {
            System.out.println("We are NOT in Facebook's homepage");
        }
        driver.close();
    }
}

نتيجة

انقر على الصورة في Selenium برنامج تشغيل الويب

أفضل الممارسات للنقر على الصور

بعض العادات تجعل أتمتة النقر على الصور أكثر موثوقية عبر المتصفحات وأحجام الشاشات المختلفة.

  • يفضل استخدام سمة ثابتة مثل title أو alt أو aria-label أو data-* بدلاً من مسارات CSS المتداخلة بعمق.
  • أضف أمر WebDriverWait صريحًا لـ ElementToBeClickable قبل إصدار أمر النقر.
  • بالنسبة للصور التي يتم تحميلها عند الحاجة، قم بتمرير العنصر إلى العرض باستخدام Javascriptالمنفذ أولاً.
  • إذا اعترضت طبقة شفافة النقرة، فارجع إلى Javaانقر باستخدام البرنامج النصي على العنصر الأساسي.
  • تحقق من صحة التنقل باستخدام driver.getTitle() أو عنصر فريد في صفحة الوجهة.

كيف يُحسّن الذكاء الاصطناعي استراتيجيات تحديد مواقع الصور

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

يمكن للمهندسين أيضًا استخدام ChatGPT أو GitHub Copilot لإنشاء مقتطفات برمجية لـ WebDriver، واقتراح تعابير CSS أو XPath قوية للصورة، وصياغة تأكيدات للصفحة التي يتم تحميلها بعد النقر. مع ذلك، يجب مراجعة الكود المُنشأ للتأكد من صحته ومعالجة حالات الانتظار والتراكب.

خاتمة

النقر على روابط الصور في Selenium يُعدّ WebDriver سهل الاستخدام بمجرد اختيار مُحدِّد موقع ثابت. يُعتبر By.cssSelector مع سمة العنوان أو النص البديل الطريقة الأكثر وضوحًا، بينما يُستخدم By.xpath كخيار احتياطي عندما يكون الترميز غير مُناسب، وتضمن عمليات الانتظار الصريحة موثوقية البرنامج النصي في جميع عمليات التشغيل.

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

حدد موقع الصورة باستخدام By.cssSelector أو By.xpath باستخدام سمة ثابتة مثل title أو alt أو aria-label، ثم استدعِ الدالة .click() على عنصر الويب المُسترجع. تحقق من النتيجة باستخدام driver.getTitle() أو عنصر فريد في الصفحة المستهدفة.

نعم. أدوات مثل Testimتقوم أدوات مثل Mabl و ChatGPT بفحص بنية DOM المحيطة واقتراح مُحدِّد ثابت بناءً على سمات العنوان، والنص البديل، و aria-label، أو البيانات. مع ذلك، ينبغي على المهندسين مراجعة المُحدِّد المُنشأ للتأكد من تفرُّده ومرونته.

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

يتطابق كلا المحددَين مع النص المرئي داخل رابط الصورة. يغلّف رابط الصورة وسم <img> ولا يُظهر أي عقدة نصية، لذا لا تُرجع المطابقة أي نتيجة. استخدم By.cssSelector أو By.xpath مع title أو alt أو aria-label بدلاً من ذلك.

إذا حجبت طبقة أو نافذة منبثقة أو تلميح الصورة، فقم بتمريرها لعرضها باستخدام Javascriptقم بتنفيذ الأمر Executor وأضف WebDriverWait لـ ElementToBeClickable. كحل بديل، قم بتنفيذ Javaانقر باستخدام البرنامج النصي على عنصر الويب لتجاوز التداخلping طبقة.

قم بتأكيد عنوان الصفحة الجديد باستخدام driver.getTitle()، العنوان الحالي URL باستخدام driver.getCurrentUrl()، أو بوجود عنصر فريد في الصفحة المقصودة. يمنح الجمع بين هذه الفحوصات الاختبارَ ثقةً بأن النقر قد أدى فعلاً إلى الانتقال.

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