QA The Other Wayضمان الجودة لعصر الاختبارات المكتوبة بالذكاء الاصطناعي. QA The Other Way.
اختبارات QA عملية

ادخل الإطار قبل اختيار عنصر التحكم.

اختبر النموذج المضمّن داخل مستنده، دون تحويل ترتيب DOM إلى شرط للمنتج.

6 دقائق للقراءةQA The Other Way
مخطط أصلي لمستندات متداخلة يميز النموذج المضمّن والصفحة الخارجية التي لم تتغير.
رسم تحريري أصلي.
فيديو توضيحي لهذه المقالة. النص الإنجليزي الذي يظهر على الشاشة؛ حدد ترجمات لهذه اللغة.

طبعة مترجمة. تظل المعرفات الفنية في شكلها الأصلي.

اختبر النموذج المضمّن داخل مستنده، دون تحويل ترتيب DOM إلى شرط للمنتج.
مثال محلي بمدخلات مختلقة، وليس واجهة عميل أو مزود.

تحتوي الصفحة على زرين للحفظ. أحدهما لإعدادات الصفحة والآخر لنموذج مضمّن. تسمية زر الحفظ وحدها لا تحدد المستند الذي يجب أن يتلقى الإجراء. إطالة المحدد خارج المستند المضمّن لا تعالج نطاق البحث المفقود.

يستخدم هذا الدليل توثيق الإطارات في Playwright مع نموذج محلي مختلق. نريد تغيير التفضيل المضمّن مع بقاء الصفحة الخارجية كما هي. المثال ليس أداة دفع أو تكاملا مع مزود أو تقييما أمنيا. سؤاله المحدد هو هل تصرف الاختبار داخل الإطار المقصود؟

حدد المستند قبل عنصر التحكم

تعمل محددات الصفحة في الإطار الرئيسي. يحتوي iframe على مستند منفصل. ادخل عبر محدد إطار ثم ابحث عن العنصر باسمه المتاح. يوضح النطاقان الاختبار دون الاعتماد على موقع الزر على الشاشة.

const preferences = page.frameLocator('iframe[title="Demo preferences"]');
await preferences.getByLabel('Display name').fill('Demo reader');
await preferences.getByRole('button', { name: 'Save', exact: true }).click();
await expect(preferences.getByRole('status')).toHaveText('Saved: Demo reader');
await expect(page.getByRole('status')).toHaveText('Outer page unchanged');

يفترض المثال وجود iframe المسمى وحقل يمكن الوصول إليه وحالة في كل مستند. استورد expect من مشغل اختبارات Playwright. الفحص الأخير يجعل إجراء خاطئا على الصفحة الخارجية ظاهرا، بدلا من قبول أي عملية حفظ بوصفها نجاحا.

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

دع الغموض يفشل بوضوح

يوثق API الخاص بـ FrameLocator خطأ عندما يطابق المحدد أكثر من إطار. هذه معلومة مفيدة: ربما أضيف مكوّن آخر أو لم يكن المحدد فريدا أصلا.

لا تضف first() أو nth() تلقائيا. قد يكون الموضع شرطا حقيقيا، لكن أثبت ذلك قبل كتابته. اختيار أول إطار دائما قد يبقي الاختبار ناجحا بعدما يظهر مكوّن غير مرتبط قبل النموذج المقصود.

تضيف الإطارات المتداخلة نطاقا آخر، لا إذنا بالتخمين. اتبع سلسلة المستندات المتوقعة واحتفظ بالمرجع قرب فحوصه. يصف الدليل أيضا البحث عن Frame بالاسم أو URL. اختر الأسلوب الذي يعبر عن الانتماء الحقيقي، لا خليطا نجح مصادفة.

تحقق من النتيجة ضمن حدود الدليل

ملء الحقل يثبت إجراء في المتصفح. رسالة الحالة تثبت ما أعلنته الواجهة. لا يثبت أي منهما وحده أن خدمة بعيدة حفظت التفضيل. مثالنا لا يحتوي على خادم. لقطته دليل على الآلية وليست رحلة تكامل مكتملة.

في المنتج الحقيقي، حدد سجل الاختبار المصرح به والنتيجة المحفوظة المتوقعة. تحقق منها عبر الأدلة التي يدعمها المنتج، وأبق الآثار بين الخدمات داخل البيئة المصرح بها. الوصول إلى عنصر مضمّن لا يمنح تلقائيا إذن الإنفاق أو الموافقة أو تغيير الحساب.

لا يمنح فحص الإطار شهادة للتنقل بلوحة المفاتيح أو انتقال التركيز أو قارئات الشاشة. تحتاج هذه إلى توقعات مستقلة. قد توجد تسمية مرئية مع سلوك تركيز سيئ عند الحد بين المستندين.

اترك ملاحظة مراجعة محددة

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

يصف AnyTest وكلاء يستكشفون تطبيقات الويب وينتجون اختبارات شاملة لمراجعة البشر. اسأل عن المستند الذي يتلقى الإجراء وعن دليل النتيجة. لا يدعي هذا الدليل وجود API خاص للإطارات في AnyTest. حدد المستند أولا ثم عنصر التحكم.

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

هل يدخل محدد الصفحة كل إطارات iframe؟

تعمل إجراءات الصفحة في الإطار الرئيسي. ادخل iframe المقصود قبل البحث عن عناصره.

هل نختار أول إطار عند وجود غموض؟

فقط إذا كان الموضع هو الشرط المتفق عليه. وإلا أصلح قاعدة الانتماء.

مصادر