Selenium इंटरव्यू में दो चीज़ें परखी जाती हैं: क्या आप स्थिर UI टेस्ट लिख सकते हैं (waits, locators, page objects) और क्या आप ऐसा फ्रेमवर्क डिज़ाइन कर सकते हैं जिसके साथ टीम आराम से काम कर सके (structure, data, reporting, CI में रन करना)। Flaky tests सबसे ज़्यादा पूछा जाने वाला टॉपिक है, क्योंकि जिसने भी Selenium इस्तेमाल किया है, उसने इनसे जूझा है।
नीचे 24 सवाल और उनके जवाब दिए गए हैं। जहाँ कोड से मदद मिलती है, वहाँ उदाहरण Java और Python सिंटैक्स में हैं, और ये विचार किसी भी भाषा में लागू होते हैं।
बेसिक्स
1. Selenium क्या है, और इसके कौन-कौन से कंपोनेंट हैं?
Selenium वेब ब्राउज़र ऑटोमेट करने के लिए एक ओपन सोर्स सूट है। Selenium WebDriver अपने ड्राइवरों के ज़रिए ब्राउज़रों को कंट्रोल करता है और ज़्यादातर लोग इसी की बात करते हैं। Selenium Grid कई मशीनों और ब्राउज़रों पर टेस्ट समानांतर रूप से चलाता है। Selenium IDE एक रिकॉर्ड और प्लेबैक एक्सटेंशन है। Selenium डेस्कटॉप ऐप्स या बिल्ट-इन टेस्ट रिपोर्टिंग नहीं संभालता, इसलिए आप इसे किसी टेस्ट फ्रेमवर्क के साथ जोड़ते हैं।
2. WebDriver कैसे काम करता है?
आपका टेस्ट W3C WebDriver प्रोटोकॉल का उपयोग करके HTTP के ज़रिए ChromeDriver या GeckoDriver जैसे ब्राउज़र ड्राइवर को कमांड भेजता है, जो ब्राउज़र को कंट्रोल करता है और नतीजे लौटाता है। Selenium के हाल के वर्शन में Selenium Manager शामिल है, जो सही ड्राइवर ढूँढकर डाउनलोड कर लेता है।
3. Selenium कौन-कौन से locators सपोर्ट करता है, और आप किसे प्राथमिकता देते हैं?
ID, name, class name, tag name, link text, partial link text, CSS selector, और XPath। किसी स्थिर ID या data-testid जैसे समर्पित टेस्ट एट्रिब्यूट को प्राथमिकता दें, फिर CSS को। XPath तब इस्तेमाल करें जब आपको ट्री में ऊपर जाना हो या टेक्स्ट मैच करना हो। /html/body/div[3]/div[2] जैसे लंबे, पोज़िशन-आधारित पाथ से बचें, जो लेआउट बदलने पर टूट जाते हैं।
4. findElement और findElements में क्या अंतर है?
findElement पहला मैच लौटाता है और अगर कोई न मिले तो NoSuchElementException थ्रो करता है। findElements एक लिस्ट लौटाता है, जो कुछ मैच न होने पर खाली होती है, इसलिए यह जाँचने के लिए उपयोगी है कि कोई चीज़ मौजूद नहीं है।
5. driver.close() और driver.quit() में क्या अंतर है?
close() मौजूदा विंडो बंद करता है। quit() सभी विंडो बंद करता है और सेशन खत्म करता है। teardown में quit() इस्तेमाल करें ताकि कोई ब्राउज़र प्रोसेस पीछे न छूटे।
Waits और flaky tests
6. waits के कौन-कौन से प्रकार हैं?
| Wait | यह कैसे काम करता है |
|---|---|
| Implicit | एलिमेंट ढूँढने के लिए एक ग्लोबल टाइमआउट |
| Explicit | किसी खास एलिमेंट पर किसी खास कंडीशन का इंतज़ार |
| Fluent | कस्टम polling interval और ignored exceptions के साथ एक explicit wait |
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("submit")));
explicit waits को प्राथमिकता दें। implicit और explicit waits को मिलाने से अप्रत्याशित देरी हो सकती है।
7. आपको Thread.sleep का उपयोग क्यों नहीं करना चाहिए?
यह हमेशा पूरा समय इंतज़ार करता है, जिससे सूट धीमा हो जाता है, और धीमे दिन पर यह फिर भी बहुत कम पड़ता है। कंडीशन-आधारित wait कंडीशन पूरी होते ही आगे बढ़ जाता है और वरना साफ़ संदेश के साथ फेल हो जाता है।
8. flaky tests के कारण क्या होते हैं, और आप इन्हें कैसे ठीक करते हैं?
आम कारण और उनके समाधान:
- टाइमिंग: स्लीप की जगह ठीक उसी कंडीशन के लिए explicit waits इस्तेमाल करें।
- साझा या बचा हुआ डेटा: हर टेस्ट के लिए टेस्ट डेटा बनाएँ और उसे साफ़ करें।
- टेस्टों के बीच निर्भरता: हर टेस्ट को स्वतंत्र और अकेले चलने लायक बनाएँ।
- अस्थिर locators: टेस्ट IDs जोड़ें और पोज़िशन-आधारित पाथ से बचें।
- एनिमेशन और ओवरले: ओवरले के गायब होने का इंतज़ार करें या टेस्ट एनवायरनमेंट में एनिमेशन बंद कर दें।
- एनवायरनमेंट की समस्याएँ: टेस्ट एनवायरनमेंट को स्थिर करें, और नेटवर्क व थर्ड-पार्टी कॉल्स की जाँच करें।
- समानांतर टकराव: हर थ्रेड के लिए स्टेट अलग रखें।
किसी flaky टेस्ट को quarantine करें ताकि वह सबको ब्लॉक न करे, फिर उसे ठीक से ठीक करें। हर जगह सिर्फ़ retries जोड़ते न जाएँ, क्योंकि इससे असली बग छिप जाते हैं।
9. StaleElementReferenceException क्या है?
आपने जो एलिमेंट ढूँढा था वह अब पेज से जुड़ा नहीं है, आमतौर पर इसलिए कि पेज दोबारा रेंडर हुआ। इसे इस तरह ठीक करें कि उपयोग से ठीक पहले एलिमेंट दोबारा ढूँढें, या नए एलिमेंट का इंतज़ार करें, बजाय लंबे समय तक रेफ़रेंस पकड़े रखने के।
10. आप उन एलिमेंट्स को कैसे संभालते हैं जो क्लिक करने लायक नहीं हैं (ElementClickInterceptedException)?
कोई चीज़ एलिमेंट को ढक रही है, जैसे कोई बैनर या लोडिंग ओवरले। ओवरले के हटने का इंतज़ार करें, एलिमेंट को व्यू में स्क्रॉल करें, या बैनर बंद करें। JavaScript क्लिक का उपयोग आख़िरी उपाय होना चाहिए, क्योंकि असली यूज़र उसे क्लिक नहीं कर पाता और टेस्ट असली बग छिपा देगा।
पेज फीचर्स को संभालना
11. आप ड्रॉपडाउन, अलर्ट, फ्रेम और विंडो को कैसे संभालते हैं?
- ड्रॉपडाउन: स्टैंडर्ड select एलिमेंट के लिए Select क्लास, और कस्टम ड्रॉपडाउन के लिए क्लिक-आधारित स्टेप्स।
- अलर्ट: accept, dismiss या पढ़ने के लिए driver.switchTo().alert()।
- फ्रेम: switchTo().frame(...) और वापस defaultContent() पर।
- विंडो और टैब: विंडो हैंडल लें, नई विंडो पर स्विच करें, और वापस स्विच करें।
12. आप फाइल अपलोड और डाउनलोड को कैसे संभालते हैं?
अपलोड के लिए, input type="file" एलिमेंट को sendKeys के साथ फाइल पाथ भेजें। डाउनलोड के लिए, options में ब्राउज़र का डाउनलोड डायरेक्टरी सेट करें और फाइल के आने का इंतज़ार करें, फिर उसका नाम और कंटेंट जांचें।
13. आप Selenium में JavaScript कैसे चलाते हैं?
JavascriptExecutor.executeScript के ज़रिए, जैसे स्क्रॉल करने के लिए या कोई ऐसी वैल्यू पढ़ने के लिए जहाँ API नहीं पहुँच सकती। इसका इस्तेमाल कम ही करें।
14. हेडलेस मोड क्या है?
ब्राउज़र बिना किसी दिखने वाली विंडो के चलता है, जो तेज़ होता है और सर्वर और CI पर काम करता है। डीबग करते समय एक दिखने वाले रन से वेरिफाई करें, और व्यूपोर्ट साइज़ जांचें, क्योंकि लेआउट अलग हो सकते हैं।
फ्रेमवर्क डिज़ाइन
15. पेज ऑब्जेक्ट मॉडल क्या है?
हर पेज या कंपोनेंट एक क्लास होती है जिसमें उसके लोकेटर और उस पर की जाने वाली एक्शन्स होती हैं। टेस्ट loginPage.loginAs(user) जैसी मेथड्स कॉल करते हैं और लोकेटर को सीधे नहीं छूते। जब UI बदलता है, तो आप कई टेस्ट के बजाय एक क्लास ठीक करते हैं।
class LoginPage:
def __init__(self, driver):
self.driver = driver
def login_as(self, user, password):
self.driver.find_element(By.ID, "user").send_keys(user)
self.driver.find_element(By.ID, "pass").send_keys(password)
self.driver.find_element(By.ID, "submit").click()
16. एक अच्छे टेस्ट फ्रेमवर्क में क्या होना चाहिए?
एक टेस्ट रनर (TestNG, JUnit, pytest), पेज ऑब्जेक्ट्स, अलग-अलग ब्राउज़र के लिए एक ड्राइवर फैक्ट्री, हर एनवायरनमेंट के लिए कॉन्फ़िगरेशन, टेस्ट डेटा मैनेजमेंट, वेट के लिए हेल्पर्स, रिपोर्टिंग, लॉगिंग, फेल होने पर स्क्रीनशॉट, और CI इंटीग्रेशन।
17. आप टेस्ट डेटा कैसे मैनेज करते हैं?
टेस्ट को जो डेटा चाहिए, उसे शुरुआत में API या डेटाबेस सेटअप के ज़रिए बनाएं, UI के ज़रिए नहीं, और बाद में हटा दें। डेटा को फाइलों या बिल्डर्स में रखें, टेस्ट में हार्ड-कोड न करें, और ऐसे टेस्ट से बचें जो किसी दूसरे टेस्ट के छोड़े डेटा पर निर्भर हों।
18. आप टेस्ट को पैरेलल में कैसे चलाते हैं?
रनर के पैरेलल फीचर का इस्तेमाल करें, हर थ्रेड को अपना ड्राइवर दें (जैसे ThreadLocal के साथ), टेस्ट को इंडिपेंडेंट रखें, और कई ब्राउज़र पर स्केल करने के लिए Selenium Grid या किसी क्लाउड ब्राउज़र सर्विस पर चलाएं।
19. Selenium Grid क्या है?
एक सिस्टम जिसमें एक हब और नोड्स (या Grid 4 में एक डिस्ट्रीब्यूटेड सेटअप) होते हैं जो अलग-अलग ब्राउज़र और ऑपरेटिंग सिस्टम पर टेस्ट पैरेलल में चलाता है। यह कुल रन टाइम कम करता है और आपको ज़्यादा ब्राउज़र कवर करने देता है।
रणनीति और परिदृश्य
20. Selenium से क्या ऑटोमेट करना चाहिए, और क्या नहीं?
स्थिर, उच्च-मूल्य, दोहराए जाने वाले फ्लो ऑटोमेट करें जैसे लॉगिन, चेकआउट, और महत्वपूर्ण रिग्रेशन पाथ। एक-बार के चेक, बार-बार बदलने वाला UI, या ऐसी चीज़ें जिन्हें नीचे के लेवल पर टेस्ट करना बेहतर है, ऑटोमेट न करें। एक स्वस्थ सूट में कई यूनिट और API टेस्ट, कम UI टेस्ट, और एंड-टू-एंड फ्लो का एक छोटा सेट होता है।
21. आप ऐसे एप्लिकेशन को कैसे टेस्ट करते हैं जिसमें कैप्चा या टू-फैक्टर लॉगिन हो?
टेस्ट में उन्हें हराने की कोशिश न करें। ऐसा टेस्ट एनवायरनमेंट इस्तेमाल करें जहाँ वे बंद हों, एक फिक्स्ड कोड या बायपास फ्लैग वाला टेस्ट अकाउंट, या सेशन बनाने के लिए एक टेस्ट API।
22. एक टेस्ट लोकली पास होता है लेकिन CI में फेल हो जाता है। आप क्या जांचते हैं?
ब्राउज़र और ड्राइवर वर्ज़न, स्क्रीन साइज़ और हेडलेस अंतर, धीमी मशीनों पर टाइमिंग, एनवायरनमेंट डेटा, नेटवर्क एक्सेस, टाइम ज़ोन और लोकेल, और डेटा शेयर करने वाले पैरेलल रन। तुलना करने के लिए फेल होने पर स्क्रीनशॉट, पेज सोर्स, और लॉग कैप्चर करें।
23. आप Selenium, Playwright, और Cypress के बीच कैसे चुनाव करते हैं?
Selenium कई भाषाओं और ब्राउज़र को सपोर्ट करता है और इसका इकोसिस्टम बहुत बड़ा है। Playwright और Cypress बिल्ट-इन वेटिंग, आसान सेटअप, और अच्छे डीबगिंग टूल्स देते हैं, और नए प्रोजेक्ट्स के लिए बेहतर हो सकते हैं। सही चुनाव भाषा, ब्राउज़र ज़रूरतों, और टीम के कौशल पर निर्भर करता है। अपने कारण बताएं, ब्रांड पसंद नहीं।
24. मुझे चेकआउट फ्लो ऑटोमेट करना समझाइए।
"मैं API के ज़रिए एक यूज़र और एक प्रोडक्ट बनाऊंगा, फिर UI के ज़रिए लॉगिन करूंगा या सेशन दोबारा इस्तेमाल करूंगा। हर स्टेप के लिए एक पेज ऑब्जेक्ट: सर्च, प्रोडक्ट, कार्ट, और पेमेंट। मैं एक टेस्ट पेमेंट मेथड इस्तेमाल करूंगा, कन्फर्मेशन एलिमेंट का इंतज़ार करूंगा, UI और API दोनों के ज़रिए ऑर्डर वेरिफाई करूंगा, और फेल होने पर स्क्रीनशॉट लूंगा। टेस्ट अपना ऑर्डर क्लीन अप करेगा, पैरेलल में चलेगा, और हर मर्ज पर पाइपलाइन में चलेगा।"
तैयारी कैसे करें
एक डेमो साइट के लिए पेज ऑब्जेक्ट्स, एक्सप्लिसिट वेट्स, फेल होने पर स्क्रीनशॉट, और एक CI रन के साथ एक छोटा सूट लिखें। यह समझाने का अभ्यास करें कि आपने एक फ्लेकी टेस्ट को कैसे ठीक किया, कारण और बदलाव के साथ। लाइव एक लोकेटर और एक वेट कोड करने के लिए तैयार रहें। अभ्यास रूटीन के लिए हमारी कोडिंग इंटरव्यू असिस्टेंट गाइड देखें और सॉफ्ट-स्किल्स राउंड के लिए बिहेवियरल इंटरव्यू गाइड देखें।
अपने जवाब ज़ोर से बोलें, और "बस एक वेट जोड़ दें" जैसे अस्पष्ट हिस्सों के लिए ट्रांसक्रिप्ट पढ़ें। किसी भी लाइव इंटरव्यू में AI टूल्स पर एम्प्लॉयर के नियमों का पालन करें।
YesToTheOffer के साथ Selenium साक्षात्कार उत्तरों का अभ्यास करें
एक mock technical interview चलाएं, अपने framework को जोर से समझाएं, और बाद में अपना transcript review करें। 30 मुफ्त मिनट, कोई subscription नहीं।



