Playwright के साथ यूआई स्टेट्स और एनिमेशन का परीक्षण
Playwright के साथ एनिमेटेड यूआई के लिए स्थिर परीक्षण कैसे लिखें: पेज.क्लॉक के साथ समय को नियंत्रित करना, कम गति और डार्क मोड का अनुकरण करना, और अक्षम एनिमेशन वाले स्क्रीनशॉट।
कोर टेकअवे
एनिमेशन परीक्षणों को नियतात्मक बनाएं: पेज.क्लॉक के साथ समय को नियंत्रित करें, जिसमें टाइमर, रिक्वेस्टएनीमेशनफ़्रेम और प्रदर्शन शामिल हैं; पेज.एमुलेटमीडिया({ रिड्यूस्डमोशन, कलरस्कीम }); के साथ उपयोगकर्ता सेटिंग्स का अनुकरण करें; मध्य-एनीमेशन पिक्सेल के बजाय राज्यों पर जोर दें; और अक्षम एनिमेशन वाले स्क्रीनशॉट लें। प्रथम श्रेणी के मामले के रूप में कम गति वाले पथ का परीक्षण करें।
एनिमेशन परीक्षण परतदार क्यों होते हैं?
एनिमेशन समय पर निर्भर करते हैं, और वास्तविक समय रन और मशीनों के बीच भिन्न होता है। 10 मिलीसेकंड पहले या देर से लिया गया स्क्रीनशॉट एक अलग फ्रेम दिखाता है। समाधान समय और सेटिंग्स को नियंत्रित करना है, और अलग-अलग फ़्रेमों के बजाय उन स्थितियों का परीक्षण करना है जिनके बीच एनिमेशन चलते हैं।
समय पर नियंत्रण रखें
Playwright की क्लॉक एपीआई एक परीक्षण को एक नकली घड़ी स्थापित करने और फिर एक निर्धारित अवधि के लिए रोकने, तेजी से आगे बढ़ाने या चलाने की सुविधा देती है। इसमें सेटटाइमआउट, सेटइंटरवल, रिक्वेस्टएनीमेशनफ्रेम और प्रदर्शन शामिल है, इसलिए उदाहरण के लिए, आप लोडिंग विलंब के बाद तेजी से आगे बढ़ सकते हैं और सफलता की स्थिति की जांच कर सकते हैं।
उपयोगकर्ता सेटिंग्स का अनुकरण करें
पेज.एमुलेटमीडिया() रिड्यूस्डमोशन को "रिड्यूस" और कलरस्कीम को "डार्क" या "लाइट" पर सेट कर सकता है। यह पुष्टि करने के लिए कि कुछ भी महत्वपूर्ण एनीमेशन पर निर्भर नहीं करता है, कम गति के साथ कुंजी प्रवाह चलाएँ, और दोनों विषयों में कंट्रास्ट समस्याओं को पकड़ने के लिए।
स्थिर स्क्रीनशॉट
Playwright टेस्ट स्क्रीनशॉट की तुलना उम्मीद (पेज).toHaveScreenshot() से कर सकता है, और स्क्रीनशॉट विकल्पों में एनिमेशन शामिल हैं: "अक्षम", जो कैप्चर के लिए CSS एनिमेशन और ट्रांज़िशन को रोकता है। अंतिम स्थिति के लिए दृश्य तुलना और व्यवहार के लिए DOM या पहुंच संबंधी दावे का उपयोग करें।
कैनवास-आधारित घटकों का परीक्षण
कैनवास एनिमेशन, जैसे कि Lottie, Rive या ExodeUI रनटाइम द्वारा तैयार किए गए, DOM में दिखाई नहीं देते हैं। आपके कोड द्वारा भेजे गए इनपुट और उससे प्राप्त होने वाली घटनाओं का परीक्षण करें, कैनवास के साथ वास्तविक पहुंच योग्य तत्वों को रखें, और समय नियंत्रित होने के बाद दृश्य जांच के लिए स्क्रीनशॉट का उपयोग करें।
उत्पादन कार्यान्वयन स्निपेट
import { test, expect } from '@playwright/test';
test('save button shows success, also with reduced motion', async ({ page }) => {
await page.clock.install(); // fake timers + rAF
await page.emulateMedia({ reducedMotion: 'reduce' }); // test the calm path
await page.goto('/settings');
await page.getByRole('button', { name: 'Save' }).click();
await expect(page.getByRole('status')).toHaveText('Saving…');
await page.clock.runFor(2000); // skip the wait deterministically
await expect(page.getByRole('status')).toHaveText('Saved');
await expect(page).toHaveScreenshot('saved.png', { animations: 'disabled' });
});याद रखने योग्य कुंजी Principle
- पेज.क्लॉक के साथ समय को नियंत्रित करें (टाइमर, रिक्वेस्टएनीमेशनफ्रेम, प्रदर्शन)
- पेज.एमुलेटमीडिया के साथ रिड्यूस्डमोशन और कलरस्कीम का अनुकरण करें
- स्थिति और सुलभ पाठ पर जोर दें, मध्य-एनीमेशन पिक्सेल पर नहीं
- एनिमेशन के साथ स्क्रीनशॉट: "अक्षम"
- प्रथम श्रेणी के मामले के रूप में कम गति वाले पथ का परीक्षण करें
अक्सर पूछे जाने वाले प्रश्नों
स्रोत
- Clock — Playwright दस्तावेज़
- Page.emulateMedia and screenshot options — Playwright दस्तावेज़
- Visual comparisons — Playwright दस्तावेज़