الوحدة 8 · أساسيات الأتمتة
أول اختبار باستخدام Playwright
اكتب اختباراً من طرف إلى طرف وشغّله على المتجر التدريبي في جهازك.
نحو 12 دقيقة قراءة و30 دقيقة تطبيق (تقديرات)
جارٍ تحميل التقدم…
اقرأ
أهداف التعلّم
- إعداد Playwright Test في مشروع صغير.
- تحديد العناصر بالدور والاسم المتاح.
- استخدام تأكيدات الويب التي تنتظر تلقائياً.
الشرح
يقود Playwright متصفحات حقيقية ويأتي مع مشغّل اختبارات. ويحصل كل اختبار على سياق متصفح جديد ومعزول — بملفات تعريف ارتباط وتخزين خاصة به — فلا تؤثر الاختبارات في بعضها. وتعثر المحددات مثل getByRole على العناصر بالطريقة التي تستخدمها التقنيات المساعدة، وتواصل التأكيدات مثل toBeVisible وtoContainText إعادة المحاولة حتى تنجح أو تنتهي المهلة، لذا نادراً ما تحتاج إلى انتظار يدوي.
mkdir shop-tests && cd shop-tests
npm init -y
npm install --save-dev @playwright/test@1.64.0
npx playwright install chromium # or use installed Chrome (see config)// playwright.config.ts
import { defineConfig } from "@playwright/test";
export default defineConfig({
testDir: "./tests",
use: {
baseURL: "http://localhost:3000",
// Uses the Chrome already installed on this machine.
// Without this line, run `npx playwright install chromium` once instead.
channel: "chrome",
},
});مثال: تتحدث السلة بعد إضافة منتجين
// tests/cart.spec.ts
import { test, expect } from "@playwright/test";
test("adding two products updates the cart", async ({ page }) => {
await page.goto("/en/qa-lab/bug-arena/commerce");
// A fresh browser context opens the mission brief first.
await page.getByRole("button", { name: "Start mission" }).click();
await page.getByRole("button", { name: "Add to cart: Pocket sketchbook" }).click();
await page.getByRole("button", { name: "Add to cart: Palm-leaf basket" }).click();
const shopNav = page.getByRole("navigation", { name: "Shop navigation" });
await shopNav.getByRole("button", { name: /Cart/ }).click();
await expect(page.getByRole("heading", { name: "Your cart" })).toBeVisible();
const summary = page.getByRole("region", { name: "Order summary" });
// 2.250 + 4.750 = 7.000 OMR merchandise subtotal
await expect(summary).toContainText("7.000 OMR");
});يفحص الاختبار مجموع المشتريات فقط. إنه مثال للبداية وليس اختباراً كاملاً لإتمام الطلب، ولا يكشف أياً من الأخطاء المزروعة في المتجر.
أخطاء شائعة
- تحديد العناصر بمسارات CSS طويلة تنكسر عند تغيّر التخطيط.
- إضافة page.waitForTimeout(…) بدلاً من استخدام التأكيدات ذات الانتظار التلقائي.
- كتابة اختبار ضخم واحد لمسار كامل بدلاً من اختبارات مركّزة.
- تشغيل اختبارات الواجهة على بيئة الإنتاج بحسابات حقيقية.
جرّب
تدرّب على ما قرأته للتو. تُفحص الإجابات هنا، ولا يُقيَّم شيء علناً ولا يُحتسب في ساحة الأخطاء.
تمرين
اكتب اختباراً ثانياً: افتح المتجر التدريبي، واختر فئة الدفاتر، وأكّد أن عدد النتائج «3 products» وأن «Leather journal» ضمن القائمة.
اكتب إجابتك أولاً، ثم قارنها بالحل النموذجي. تبقى في هذه الصفحة فقط ولا تُرسل إلى أي مكان.
راجع
اختبر نفسك — يجب أن تكون الآن قادراً على:
- إعداد Playwright Test في مشروع صغير.
- تحديد العناصر بالدور والاسم المتاح.
- استخدام تأكيدات الويب التي تنتظر تلقائياً.
تدرّب في مختبر الجودة
مراجع
تابع
عندما تكون مستعداً، ضع علامة الإكمال على الدرس في خطوة «جرّب» ثم انتقل إلى التالي.
يُوسم بأنه مقروء عندما تصل إلى نهاية الدرس.