सभी को नमस्कार!
स्वचालित परीक्षणों में ईमेल पढ़ना एक ऐसी तरकीब है जिसके बारे में आपको यह जानने की आवश्यकता हो सकती है कि कई परियोजनाओं में इसे कैसे किया जाए। यहां बताया गया है कि इससे क्यों और कैसे निपटा जाए...
ठीक है, यदि सिस्टम ईमेल भेजता है - तो आप यह सत्यापित करना चाहेंगे कि वे भेजे जा रहे हैं और क्लिक करने योग्य लिंक सहित सामग्री सही है।
तो ये सामान्य परिदृश्य हैं जब आपको इसकी आवश्यकता होती है:
साइन अप करें।
आपके द्वारा खाता बनाते ही कई प्लेटफ़ॉर्म एक पुष्टिकरण ईमेल भेजते हैं, और आपको ईमेल से एक पुष्टिकरण लिंक पर क्लिक करना होता है।
चालान.
यदि आपका ऐप कोई भुगतान करता है - तो वे आम तौर पर ईमेल के माध्यम से चेक या चालान भेजते हैं, इसलिए आप यह भी देखना चाहेंगे कि क्या उनकी सामग्री सही है।
परिणाम।
मेडिकल परीक्षण के परिणाम की तरह. मेरे अनुभव में - कुछ अस्पताल परीक्षण पूरा होने के बाद परिणामों के साथ एक ईमेल भेजते हैं (या कम से कम एक व्यक्तिगत पृष्ठ का लिंक जहां आप रिपोर्ट देख सकते हैं)।
…
बेशक, यह पूरी सूची नहीं है - ये केवल वे उपयोग के मामले हैं जिनसे मैं अपने करियर में सबसे अधिक मिला हूं।
इन परिदृश्यों को सत्यापित करने में विफल रहने से उपयोगकर्ताओं को ईमेल नहीं मिल सकते हैं या ईमेल में गलत जानकारी मिल सकती है। परियोजनाओं में से एक में, इससे हमें एक समाप्त हो चुके सेंडग्रिंड टोकन को जल्दी ढूंढने में मदद मिली।
ईमेल पढ़ना एक मुश्किल काम है, लेकिन असंभव नहीं।
शुरुआती ईमेल क्लाइंट सर्वर से ईमेल लाने के लिए POP3 का उपयोग कर रहे थे, लेकिन इसमें एक छोटी सी समस्या है - डाउनलोड होने के बाद यह ईमेल को सर्वर से हटा देता है।
बाद में, IMAP प्रोटोकॉल आया - यह आपको केवल सर्वर से ईमेल पढ़ने की अनुमति देता है।
समस्या यह है -
दूसरी ओर, जीमेल जैसी कुछ सेवाएँ आपके ईमेल में हेरफेर करने के लिए एक REST API प्रदान करती हैं, लेकिन एक और समस्या है - दस्तावेज़ीकरण और इसकी लाइब्रेरी वास्तव में उपयोगकर्ता के अनुकूल नहीं हैं (विशेषकर उन लोगों के लिए जो ईमेल परीक्षण के साथ ज्यादा काम नहीं करते हैं)।
यहीं पर जीमेल-गेटर आता है - एक एनपीएम लाइब्रेरी जो आपको ईमेल पढ़ने और यहां तक कि उन्हें अपने ब्राउज़र में खोलने की अनुमति देती है यदि आप प्लेराइट जैसे ब्राउज़र ऑटोमेशन टूल का उपयोग करते हैं।
सबसे पहली बात - आपको अपने प्रोजेक्ट में पैकेज इंस्टॉल करना होगा:
npm install gmail-getter
जीमेल एपीआई में लॉग इन करने के लिए, आपको क्रेडेंशियल प्राप्त करने की आवश्यकता है: एक क्लाइंट आईडी , एक क्लाइंट सीक्रेट , और एक रीफ्रेश टोकन । ये क्रेडेंशियल आपको एक एक्सेस टोकन प्राप्त करने देते हैं, जो आगे के अनुरोधों (जैसे ईमेल की सूची या एकल ईमेल आदि प्राप्त करना) में आवश्यक है।
जाने के लिए कदम:
Google क्लाउड कंसोल में एक प्रोजेक्ट बनाएं।
एपीआई और सेवा अनुभाग में OAuth क्रेडेंशियल बनाएं ( अधिमानतः, यदि आपको स्वचालित परीक्षणों के लिए इसकी आवश्यकता है तो वहां डेस्कटॉप ऐप चुनें ) और इसे डाउनलोड करें।
जीमेल एपीआई सक्षम करें।
एक ताज़ा टोकन प्राप्त करें.
रिफ्रेश टोकन प्राप्त करने के लिए - बस प्रोजेक्ट रूट में एक कमांड निष्पादित करें:
npx gmail-getter get-refresh-token
(या कहीं और यदि आपने पैकेज विश्व स्तर पर स्थापित किया है)
get-refresh-token
आपको credentials.json
फ़ाइल को उस स्थान पर रखना होगा जहां आप कमांड निष्पादित करेंगे।
⚠️ क्रेडेंशियल फ़ाइल नाम केस-संवेदी है ⚠️
एक बार कॉन्फ़िगरेशन हो जाने के बाद, आपको अपने स्वचालित परीक्षणों में एक एक्सेस टोकन प्राप्त करना होगा। मैं कहूंगा कि इसके लिए सबसे अच्छी जगह एक वैश्विक सेटअप है (एक फ़ंक्शन जो परीक्षण शुरू होने से पहले निष्पादित होता है)।
तो, यह कुछ इस तरह होगा:
import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) }
उपरोक्त उदाहरण पर्यावरण चर का उपयोग करता है, जिसके लिए आपको निश्चित रूप से dotenv पैकेज भी स्थापित करने की आवश्यकता होगी।
लेकिन, यदि आप चीजों को सरल रखना चाहते हैं - तो आप इस स्निपेट का उपयोग कर सकते हैं जहां आपको टोकन तक पहुंचने की आवश्यकता है:
const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )
अभी, जीमेल का REST API आपके लिए आवश्यक ईमेल ढूंढने के लिए अपनी स्वयं की क्वेरी भाषा का उपयोग करता है:
const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')
उपरोक्त आदेश आपको एक ईमेल ऑब्जेक्ट लौटाता है, लेकिन आपको अभी भी इसकी सामग्री या एक लिंक प्राप्त करने की आवश्यकता है। from:squier7 subject:Test!
उपरोक्त लिंक से सिंटैक्स का अनुसरण करते हुए अपनी स्वयं की क्वेरी के लिए ☝️
आप रेगेक्स का उपयोग करके किसी लिंक को पार्स कर सकते हैं:
const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)
/(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im
अपने रेगुलर एक्सप्रेशन से बदलें ☝️
या ईमेल की संपूर्ण HTML सामग्री प्राप्त करें, और इसे अपने ब्राउज़र में प्रस्तुत करें:
import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser })
मुझे लगता है कि अब यह बिल्कुल स्पष्ट है कि स्वचालित परीक्षणों में ईमेल के साथ काम करना मुश्किल हो सकता है! लेकिन इन ट्रिक्स को जानने से चीजें बहुत आसान हो जाती हैं।
आप अभी भी कुछ अन्य ईमेल सेवाओं के माध्यम से जा सकते हैं या IMAP आज़मा सकते हैं, लेकिन मैं आपको गारंटी देता हूं - यह उतना आसान नहीं होगा जितना इस गाइड में है, क्योंकि आपको अपना स्वयं का एक सहायक बनाने की आवश्यकता होगी, जैसे कि gmail-getter प्रदान किया गया है यहाँ।
आप GitHub पर नाटककार का उदाहरण पा सकते हैं। सरू का उदाहरण भी.