في ظل التوجيهات الجديدة الموجودة في دليل الأسلوب الخاص بـ Protractor، يُعتبر استخدام محددات xpath باعتبارها ممارسة غير جيدة. وفي ضوء ذلك، يطرح السائل استفساراً حول كيفية تحديد عنصر الوالد باستخدام محددات أخرى مدمجة في Protractor/WebDriverJS.
أولاً وقبل الانتقال إلى الحلول المحددة، يمكننا أن نفهم أهمية تجنب استخدام xpath في ضوء الأسلوب الذي تم تبنيه. يهدف هذا التوجيه إلى تحسين قابلية صيانة وفهم الاختبارات، حيث يمكن أن تكون تعبيرات xpath غامضة وتعقيدية. لحل مشكلة تحديد عنصر الوالد بدون استخدام xpath، يمكن الاعتماد على محددات Protractor الأخرى.
-
إضافة سحب وإفلات في Rails01/04/2024
-
دمج العناصر المكررة في مصفوفة جافا سكريبت09/03/2024
للبداية، يُفضل استخدام محدد element
بالتزامن مع by.xpath
في حال كانت تلك الطريقة أمورًا ضرورية. على سبيل المثال:
javascriptthis.dashboard = element(by.linkText("Dashboard")).element(by.xpath(".."));
يمكن تحويلها إلى:
javascriptthis.dashboard = element(by.linkText("Dashboard")).element(by.xpath(".."));
علاوة على ذلك، يمكن استخدام element
مباشرة مع by.xpath
لتحديد العنصر الأب:
javascriptthis.dashboard = element(by.xpath("//a[text()='Dashboard']/.."));
هنا، يتم استخدام محدد element
مع xpath لتحديد الوالد مباشرة بدون الحاجة إلى الرمز ..
المستخدم في xpath التقليدي.
وبناءً على السياق، يمكن أيضًا استخدام محددات أخرى كـ by.css
بشكل فعال لتحديد الوالد. على سبيل المثال:
javascriptthis.dashboard = element(by.css("a:contains('Dashboard')").element(by.xpath(".."));
في هذا المثال، تم استخدام by.css
بالتنسيق مع التعبير :contains
لتحديد الرابط الذي يحتوي على نص “Dashboard”.
باختصار، يمكن استخدام محددات Protractor المتعددة لتحديد عناصر الواجهة بشكل أكثر فعالية وفعالية، مما يساهم في إنشاء اختبارات موثوقة وذات صيانة جيدة وتجنب الاعتماد على xpath الذي قد يكون غامضًا وصعب الفهم.
المزيد من المعلومات
في سياق استخدام Protractor والبحث عن العنصر الأب بطرق أخرى، يُفضل أيضًا التعرف على محددات أخرى مدمجة في Protractor والتي يمكن أن تساعد في تحديد العناصر بشكل أكثر فعالية. من بين هذه المحددات:
-
by.binding
: يمكن استخدامها لتحديد العناصر بناءً على النصوص التي تم العثور عليها في الواجهة. على سبيل المثال:javascriptthis.dashboard = element(by.binding("Dashboard"));
-
by.partialButtonText
: تستخدم لتحديد العناصر باستناد إلى جزء من النص الموجود في العنصر. مثال:javascriptthis.dashboard = element(by.partialButtonText("Dash"));
-
by.cssContainingText
: يتيح تحديد العناصر باستناد إلى نص محدد وجزء من تنسيق CSS. على سبيل المثال:javascriptthis.dashboard = element(by.cssContainingText("a", "Dashboard"));
-
by.className
: يستخدم لتحديد العناصر باستناد إلى اسم الفئة. مثال:javascriptthis.dashboard = element(by.className("dashboard-link"));
-
by.id
: يمكن استخدامها لتحديد العناصر باستناد إلى معرف العنصر. مثال:javascriptthis.dashboard = element(by.id("dashboard-link"));
-
by.tagName
: يتيح اختيار العناصر باستناد إلى اسم العنصر (مثلللروابط). مثال:
javascriptthis.dashboard = element(by.tagName("a"));
تلك المحددات تعد بديلاً فعالًا لاستخدام xpath وتسهل عملية تحديد العناصر في واجهة المستخدم. يمكن تكامل هذه المحددات في استراتيجية البحث عن الوالدين أو العناصر الفرعية بشكل أكثر وضوحاً، مما يجعل الاختبارات أكثر قوة وصيانة.