{ اختبار البرمجيات - Software Testing }

كيفية تنفيذ أتمتة السحب والإفلات Drag-and-Drop Automation

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


لماذا يجب اختبار ميزة السحب والإفلات Drag-and-Drop؟

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

ومع ذلك، إذا لم يتم اختبار ميزة السحب والإفلات بشكل كافٍ، فقد تظهر مشكلات تؤثر سلبًا على تجربة المستخدم وموثوقية التطبيق. فيما يلي بعض المشكلات المحتملة:

  • وضع العناصر بشكل غير صحيح: إذا لم يتم اختبار الميزة بدقة، قد لا يتم وضع العناصر في المكان الصحيح بعد السحب، مما يسبب ارتباكًا وإحباطًا للمستخدمين. على سبيل المثال، قد يتم تثبيت العنصر في موضع خاطئ، أو يتداخل مع عناصر أخرى، أو يختفي تمامًا.
  • مشكلات الأداء: قد تكون إجراءات السحب والإفلات مرهقة للموارد، وإذا لم يتم تحسينها، فقد تسبب اختناقات في الأداء. يمكن أن تؤدي الواجهات البطيئة أو غير المستجيبة إلى تقليل جودة تجربة المستخدم، خاصة على الأجهزة ذات الطاقة المعالجة المحدودة.
  • سلوك غير متسق عبر الأجهزة والمتصفحات: قد تتعامل الأجهزة والمتصفحات المختلفة مع إجراءات السحب والإفلات بشكل مختلف. من دون إجراء اختبارات عبر الأجهزة والمتصفحات، قد يواجه المستخدمون سلوكًا غير متسق، مما يؤدي إلى تجربة مجزأة.
  • مشكلات الوصول: من الضروري ضمان أن تكون ميزات السحب والإفلات متاحة لجميع المستخدمين، بما في ذلك أولئك الذين يستخدمون تقنيات المساعدة. قد يؤدي عدم كفاية الاختبار إلى ميزات غير قابلة للاستخدام للأشخاص ذوي الإعاقة، مما ينتهك معايير الوصول ويستثني جزءًا من قاعدة المستخدمين.
  • استمرارية التغييرات: يتوقع المستخدمون أن التغييرات التي يقومون بها عبر السحب والإفلات ستظل قائمة. إذا لم يتم حفظ هذه التغييرات وتحميلها بشكل صحيح، فقد يفقد المستخدمون التخطيطات أو الإعدادات المخصصة، مما يسبب إحباطًا وفقدان الثقة في التطبيق.

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


السيناريوهات الرئيسية للاختبار

عند أتمتة اختبار ميزات السحب والإفلات، من الضروري تغطية مجموعة من السيناريوهات لضمان التحقق الشامل. فيما يلي السيناريوهات الأساسية التي يجب تضمينها:


1. السحب والإفلات الأساسي

  • السيناريو: التحقق من قدرة المستخدم على سحب عنصر من موضع وإفلاته في موضع آخر.
  • الهدف: ضمان عمل وظيفة السحب والإفلات الأساسية بشكل صحيح.

الخطوات:

  • تحديد عنصر في القائمة.
  • سحب العنصر إلى موضع جديد.
  • إفلات العنصر والتحقق من موضعه الجديد.


2. الحالات الحدودية

  • السيناريو: اختبار ميزة السحب والإفلات عند الحدود القصوى للقائمة.
  • الهدف: ضمان إمكانية نقل العناصر إلى المواضع الأولى والأخيرة دون أخطاء.

الخطوات:

  • سحب عنصر إلى الموضع الأعلى في القائمة.
  • التحقق من وضع العنصر بشكل صحيح في البداية.
  • سحب عنصر إلى الموضع الأخير في القائمة.
  • التحقق من وضع العنصر بشكل صحيح في النهاية.


3. المواضع المتوسطة

  • السيناريو: اختبار نقل العناصر إلى مواضع مختلفة داخل القائمة.
  • الهدف: ضمان إمكانية نقل العناصر إلى ومن أي موضع داخل القائمة.

الخطوات:

  • سحب عنصر إلى موضع بالقرب من منتصف القائمة.
  • التحقق من وضع العنصر بشكل صحيح في الموضع الجديد.
  • تكرار العملية مع عناصر ومواضع مختلفة لضمان القوة.


4. استمرارية التغييرات

  • السيناريو: التحقق من أن التغييرات الناتجة عن إجراءات السحب والإفلات تظل قائمة بعد إعادة تحميل الصفحة أو التنقل.
  • الهدف: ضمان حفظ ترتيب العناصر الجديد وإعادة تحميله بشكل صحيح.

الخطوات:

  • سحب عنصر إلى موضع جديد.
  • إعادة تحميل الصفحة أو التنقل بعيدًا ثم العودة إلى القائمة.
  • التحقق من بقاء العنصر في الموضع الجديد، مما يؤكد حفظ التغيير.


5. الحالات النادرة

  • السيناريو: اختبار الإجراءات غير الشائعة ولكن المحتملة التي قد يقوم بها المستخدمون.
  • الهدف: ضمان تعامل التطبيق بشكل صحيح مع الإجراءات غير العادية.

الخطوات:

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


6. الاختبارات عبر المتصفحات والأجهزة

  • السيناريو: اختبار ميزة السحب والإفلات عبر متصفحات وأجهزة مختلفة.
  • الهدف: ضمان سلوك وأداء متسقين بغض النظر عن المتصفح أو الجهاز المستخدم.

الخطوات:

  • تكرار الاختبارات الأساسية والحالات الحدودية والمواضع المتوسطة واختبارات الاستمرارية على متصفحات مختلفة (مثل Chrome وFirefox وSafari) وأجهزة مختلفة (مثل الحواسيب المكتبية والأجهزة اللوحية والهواتف المحمولة).
  • التحقق من الاتساق في الوظائف والأداء.


كيفية تنفيذ أتمتة السحب والإفلات

اختبار ميزات السحب والإفلات يعتبر جزءًا أساسيًا لضمان جودة التطبيقات الحديثة. نستعرض هنا دليلًا شاملاً لتنفيذ أتمتة هذه العملية باستخدام Playwright، مع تضمين جميع الأكواد اللازمة.


أكواد تنفيذ اختبار السحب والإفلات باستخدام Playwright


1. تعريف حالة الاختبار والتنقل إلى الصفحة المستهدفة

test("اختبار السحب والإفلات", async ({ page }) => {
    await page.goto("your-page-url"); // استبدل "your-page-url" بعنوان الصفحة المستهدفة

2. تحديد العناصر المصدر والهدف

    const sourceItem = page.getByText("Item 3", { exact: true }); // العنصر الذي سيتم سحبه
    const targetItem = page.getByText("Item 1", { exact: true }); // العنصر الهدف

3. تنفيذ عملية السحب والإفلات

    await sourceItem.hover(); // تمرير الماوس فوق العنصر المصدر

    const sourceBox = await sourceItem.boundingBox(); // الحصول على أبعاد العنصر المصدر
    if (sourceBox) {
        const sourceX = sourceBox.x + sourceBox.width / 2; // تحديد مركز العنصر المصدر
        const sourceY = sourceBox.y + sourceBox.height / 2;

        await page.mouse.move(sourceX, sourceY); // تحريك الماوس إلى مركز العنصر المصدر
        await page.mouse.down(); // الضغط على الزر الأيسر للماوس
    } else {
        console.warn("العنصر المصدر غير موجود. تم تخطي إجراء السحب.");
    }

    const targetBox = await targetItem.boundingBox(); // الحصول على أبعاد العنصر الهدف
    if (targetBox) {
        const targetX = targetBox.x + targetBox.width / 2; // تحديد مركز العنصر الهدف
        const targetY = targetBox.y + targetBox.height / 2;

        await page.mouse.move(targetX, targetY); // تحريك الماوس إلى مركز العنصر الهدف
        await page.mouse.up(); // تحرير الزر الأيسر للماوس
    } else {
        console.warn("العنصر الهدف غير موجود. تم تخطي إجراء الإفلات.");
    }

4. التحقق من ترتيب العناصر بعد السحب والإفلات

    const items = await page.$$eval(".list-item", (items) =>
        items.map((item) => item.textContent) // استخراج النصوص لجميع العناصر في القائمة
    );
    expect(items).toEqual(["Item 3", "Item 1", "Item 2", "Item 4", "Item 5"]); // تحقق من الترتيب المتوقع

5. ضمان استمرارية التغييرات

    await page.getByRole("checkbox").click(); // تنفيذ إجراء لحفظ الحالة (اختياري ويعتمد على تطبيقك)

    await page.reload(); // إعادة تحميل الصفحة

    const itemsAfterRefresh = await page.$$eval(".list-item", (items) =>
        items.map((item) => item.textContent) // استخراج النصوص مرة أخرى
    );
    expect(itemsAfterRefresh).toEqual(["Item 3", "Item 1", "Item 2", "Item 4", "Item 5"]); // تحقق من بقاء الترتيب
});

الكود الكامل

test("اختبار السحب والإفلات", async ({ page }) => {
    await page.goto("your-page-url");

    const sourceItem = page.getByText("Item 3", { exact: true });
    const targetItem = page.getByText("Item 1", { exact: true });

    await sourceItem.hover();

    const sourceBox = await sourceItem.boundingBox();
    if (sourceBox) {
        const sourceX = sourceBox.x + sourceBox.width / 2;
        const sourceY = sourceBox.y + sourceBox.height / 2;

        await page.mouse.move(sourceX, sourceY);
        await page.mouse.down();
    } else {
        console.warn("العنصر المصدر غير موجود. تم تخطي إجراء السحب.");
    }

    const targetBox = await targetItem.boundingBox();
    if (targetBox) {
        const targetX = targetBox.x + targetBox.width / 2;
        const targetY = targetBox.y + targetBox.height / 2;

        await page.mouse.move(targetX, targetY);
        await page.mouse.up();
    } else {
        console.warn("العنصر الهدف غير موجود. تم تخطي إجراء الإفلات.");
    }

    const items = await page.$$eval(".list-item", (items) =>
        items.map((item) => item.textContent)
    );
    expect(items).toEqual(["Item 3", "Item 1", "Item 2", "Item 4", "Item 5"]);

    await page.getByRole("checkbox").click();
    await page.reload();

    const itemsAfterRefresh = await page.$$eval(".list-item", (items) =>
        items.map((item) => item.textContent)
    );
    expect(itemsAfterRefresh).toEqual(["Item 3", "Item 1", "Item 2", "Item 4", "Item 5"]);
});

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

في النهاية

اختبار ميزات السحب والإفلات Drag-and-Drop ضروري لضمان تجربة مستخدم سلسة وبديهية في تطبيقات الويب الحديثة. من خلال أتمتة هذه الاختبارات، يمكننا التحقق بكفاءة من أن الميزات تعمل بشكل صحيح في مختلف السيناريوهات.

للحصول على مثال كامل للكود وموقع اختبار يحتوي على قائمة للسحب والإفلات Drag-and-Drop، قم بزيارة صفحة GitHub.
لا تتردد في استخدام الموارد المقدمة وتعديلها لتناسب احتياجاتك في الاختبار. نتمنى لك تجربة اختبار ناجحة! 🎉

المصدر: thegreenreport

مقالات ذات صلة

زر الذهاب إلى الأعلى