في موقع لا تملكه، لا تستطيع إضافة data-testid. مع ذلك يمكن بناء strategy تقلل الكسر عبر ترتيب الأدلة: semantics، attributes، علاقات محلية، ثم النص. الأهم أن العثور على عنصر ليس نهاية العملية؛ يجب التحقق أنه العنصر الصحيح قبل action.
ابدأ بال ـsemantics
Accessible role و name و label غالبًا أقرب لوظيفة العنصر من class مصمم. زر باسم حفظ داخل dialog محدد أوضح من .btn-primary. لكن النص قد يتغير بالترجمة، لذلك اجمع role مع scope.
استخدم anchor ثابتًا ثم relation
إذا لا يوجد identifier مباشر، ابحث عن heading أو label ثابت ثم العنصر المجاور داخل container. هذه علاقة محلية أقوى من CSS path من root. تجنب parent chains الطويلة.
خطوات عملية
- حدد region.
- ابحث عن anchor.
- انتقل داخل نفس container.
- تحقق من uniqueness.
تعامل مع النص بحذر
Exact text هش أمام whitespace والترجمة، و contains قد يطابق أكثر من عنصر. استخدم normalization وأجزاء مميزة عند الضرورة. لا تعتمد على رقم أو قيمة متغيرة كنص selector.
صمم score للمرشحين عند التعقيد
في بعض المواقع يمكن جمع عدة إشارات: role، text، attribute، قرب من label. لكن لا تحولها إلى تخمين غامض. إذا لم يتجاوز المرشح threshold واضحًا، توقف. Action خاطئ أخطر من failure ظاهر.
قائمة مراجعة
- عنصر visible.
- enabled.
- داخل region صحيح.
- عدد matches معروف.
سجل selector telemetry
احتفظ بنوع selector والوقت وعدد matches وأي fallback. تحليل هذه البيانات يكشف الصفحات الأكثر تغيرًا ويحدد أين يستحق بناء integration أكثر تخصصًا.
صمم سياسة عندما تتعارض إشارات ال ـSelector
قد تجد role مناسبًا لكن النص مختلف، أو text صحيحًا داخل container خاطئ. لا تجعل أول إشارة تربح. حدد signals إلزامية وأخرى مساعدة: مثل region و role إلزاميان، والنص يزيد الثقة. إذا ظهرت إشارات متناقضة، أوقف action وسجل candidates. يمكن تخزين candidate metadata دون HTML كامل. هذا التصميم مهم للصفحات التي تحتوي أزرارًا متكررة مثل حذف أو حفظ داخل عدة cards، لأنه يمنع click صحيح الاسم في السياق الخطأ.
قائمة مراجعة
- signals إلزامية محددة.
- scope له وزن أعلى من text.
- conflict يوقف action.
- candidate log خالٍ من بيانات حساسة.
ضع Selector Ownership ومراجعة للتغييرات
في فريق كبير، قد يصلح شخص selector بسرعة بطريقة تكسر سيناريو آخر. اربط كل integration أو page object بمالك واختبارات contract. أي تغيير في selector المشترك يمر بمراجعة ويوضح سبب اختيار الإشارة الجديدة. احتفظ بتاريخ قصير لل fallbacks التي أزيلت حتى يمكن ربط failure بتحديث الموقع. هذه الحوكمة البسيطة تمنع تكدس selectors متعارضة وتحوّل استراتيجية الاختيار إلى جزء من الكود يمكن صيانته، لا أسرار موزعة في عشرات workflows.
حوّل الفكرة إلى سيناريو قابل للإعادة
لتقييم «Selector Strategy عملية للمواقع المتغيرة باستمرار» اكتب workflow صغيرًا له بداية معروفة ونهاية قابلة للقياس، ثم اختبر happy path وحالة timeout وحالة إعادة التشغيل. يجب أن يكون واضحًا ما إذا كانت الخطوة قابلة للتكرار بأمان، وما الذي يحدث إذا نُفذت مرتين، وأين تحفظ حالة التقدم. بعد ذلك شغّل السيناريو على بيانات اختبار لا على حساب إنتاجي، وسجّل سبب كل retry والوقت المستغرق. هذه التفاصيل تمنع نجاحًا ظاهريًا في أول تشغيل ثم فشلًا صعب التفسير عندما تعمل المهام بالتوازي أو تستأنف بعد crash.
قائمة مراجعة
- بداية ونهاية واضحتان.
- Retry محدود ومسبب.
- اختبار تنفيذ الخطوة مرتين.
- استعادة بعد restart أو crash.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…