टेस्टर्स के लिए ब्राउज़र DevTools

Browser developer tools (DevTools) हर बड़े desktop browser में बने panels हैं, जो दिखाते हैं कि page किससे बना है और क्या कर रहा है: live DOM और उसकी styles, JavaScript के messages, network requests, stored data और समय कहाँ जा रहा है। इन्हें F12 या Ctrl+Shift+I (macOS पर Cmd+Option+I) से खोलें, या किसी element पर right-click करके Inspect चुनें। Safari इन्हें तभी दिखाता है जब आप उसकी Advanced settings में web developer features चालू करते हैं।

Tester के लिए हर panel एक सवाल का जवाब देता है। एक profile form "Profile saved" दिखाता है, फिर भी reload के बाद पुराना phone number लौट आता है। Screen आपको वजह नहीं बता सकती; Network panel दिखाता है कि request गई या नहीं, उसमें क्या था और server ने क्या जवाब दिया।

यह क्यों ज़रूरी है

Screen पर आप failure देखते हैं; उसके पीछे का defect page के code, server या data में होता है। "Save काम नहीं करता" वाली report से developer को शून्य से शुरू करना पड़ता है। "Save PATCH /api/v1/profile भेजता है, server 422 लौटाता है और page फिर भी success दिखाता है" पहले से बता देता है कि server ने input reject किया और page ने उस rejection को ignore किया।

DevTools वे failures भी दिखाता है जिन्हें interface छिपा देता है: कुछ न करने वाले button के पीछे script error, चुपचाप fail होती request, logout के बाद भी बची session cookie। हर panel किस सवाल का जवाब देता है, यह जानना अंदाज़े को सबूत में बदल देता है।

हर panel, एक सवाल

ज़्यादातर testing काम छह panels से हो जाता है। यह lesson Chrome के नाम इस्तेमाल करता है; Edge के DevTools उसी Chromium code से बने हैं, इसलिए नाम और layout लगभग हर जगह मेल खाते हैं। Firefox और Safari में भी यही tools हैं, कुछ दूसरे नामों से: Firefox में Elements की जगह Inspector, और दोनों में Application की जगह Storage और device toolbar की जगह Responsive Design Mode। वह panel खोलें जिसका सवाल आपके सामने के symptom से मेल खाता हो।

  • Elements: page पर अभी क्या है, और वह ऐसा क्यों दिखता है?
  • Console: क्या page का code fail हुआ, और उसने क्या कहा?
  • Network: browser ने क्या भेजा, जवाब में क्या आया, और कितना समय लगा?
  • Application: यह site मेरे browser में क्या store करती है?
  • Performance: load या click के दौरान समय कहाँ जाता है?
  • Device toolbar: phone के साइज़ वाली screen और touch पर layout कैसे बदलता है?
DevTools के छह panels, छह सवाल: symptom tester को बताता है कि कौन-सा panel खोलना है, और हर panel bug report के लिए अपनी तरह का सबूत देता है।
Panelकिस सवाल का जवाब देता हैकब खोलेंकौन-सा सबूत record करें
ElementsPage पर अभी क्या है, और वह ऐसा क्यों दिखता है?कोई element ग़ायब, छिपा, ग़लत जगह या ग़लत style में हैElement का markup और जीतने वाला CSS rule
Consoleक्या page का code fail हुआ, और उसने क्या कहा?Click पर कुछ नहीं होता या page का कोई हिस्सा खाली रहता हैFile और line के साथ error का exact text
Networkक्या भेजा गया, क्या लौटा, कितना समय लगा?Data save या show नहीं होता, या कोई step धीमा हैMethod, URL, status, payload, response और timing
Applicationयह site मेरे browser में क्या store करती है?Login, logout या saved state अजीब व्यवहार करती हैCookie के नाम और attributes, storage keys और values
PerformanceLoad या click के दौरान समय कहाँ जाता है?Click देर से जवाब देता है या content उछलता हैLong tasks और layout shifts दिखाने वाली recording
Device toolbarPhone के साइज़ वाली screen पर layout कैसे बदलता है?Content बाहर निकलता है या controls को tap करना मुश्किल हैViewport साइज़ या device preset, और screenshot

Panels के नाम Chrome के अनुसार हैं; Edge के DevTools में भी यही हैं। Firefox और Safari कहीं-कहीं दूसरे नाम इस्तेमाल करते हैं: Elements की जगह Inspector (Firefox), Application की जगह Storage, device toolbar की जगह Responsive Design Mode।

Elements और Console: page और उसका code

Elements panel live DOM दिखाता है, जैसा DOM वाले lesson में देखा। कोई node चुनें तो Styles pane उस पर लागू हर CSS rule दिखाता है, और override हुई declarations कटी हुई दिखती हैं: इसी से पता चलता है कि button grey क्यों है या label क्यों कट रहा है। Accessibility pane उसका computed role और accessible name दिखाता है, यानी वह नाम जो screen reader बोलता है।

किसी समस्या की जाँच के लिए आप text और styles वहीं edit कर सकते हैं, जैसे label में एक लंबा Arabic शब्द paste करके देखें कि वह बाहर निकलता है या नहीं। ये edits सिर्फ़ आपके tab में रहते हैं और reload पर मिट जाते हैं: ये defect की संभावित जगह दिखाते हैं, यह साबित नहीं करते कि product काम करता है।

Console JavaScript errors और warnings, fail हुए resource loads और security messages दिखाता है; ज़्यादातर messages उस file और line, या उस URL से जुड़े होते हैं जहाँ से वे आए। आप page से सवाल पूछने के लिए expressions भी type कर सकते हैं, जैसे नीचे। जो code आप नहीं समझते उसे कभी paste न करें: वह आपके logged-in session के साथ चलता है। एक सीमा: Chrome navigator.userAgent को major version और उसके बाद .0.0.0 तथा एक fixed OS version तक घटा देता है, इसलिए browser का exact version उसके About page से लें।

$0                            // the element selected in Elements
$0.disabled                   // is that button disabled right now?
$$('img:not([alt])').length   // images without an alt attribute
navigator.userAgent           // browser and OS; Chrome gives the major version only

आज़माएँ: User-Agent पार्सर

Network: क्या भेजा गया और क्या लौटा

Network panel DevTools खुले रहने तक हर request record करता है, उसके status code, type, initiator, size और time के साथ। किसी request पर click करें तो उसके headers, page का भेजा payload, response और timing दिखते हैं।

एक request बता देती है कि किस तरफ़ शक करना है। Request में गलत data: page देखें। Request सही, response गलत: server देखें। दोनों सही पर screen गलत: देखें कि page response को कैसे handle करता है। जिस request को जवाब नहीं मिला, उसमें status code की जगह (failed) दिखता है।

समस्या reproduce करने से पहले panel खोलें; पहले की requests उसमें नहीं दिखतीं। फिर इनका इस्तेमाल करें:

  • Preserve log, ताकि page navigate होने पर भी list बनी रहे, जैसे form submit होने के बाद।
  • Disable cache, ताकि DevTools खुले रहने तक requests browser का HTTP cache छोड़ दें। Cookies, stored data और कोई भी service worker बने रहते हैं, इसलिए पहली बार आने वाले visitor का view देखने के लिए private window इस्तेमाल करें।
  • Throttling, धीमे connection या offline होने को simulate करके loading और error states देखने के लिए।
  • Fetch/XHR filter, static files छिपाकर सिर्फ़ data ले जाने वाली calls रखने के लिए।
  • Copy as cURL, जो request को curl के command में बदल देता है (curl HTTP requests भेजने वाला command-line program है), ताकि developer ठीक वही request दोबारा भेज सके। Command में आपकी cookies और Authorization header होते हैं: share करने से पहले इन्हें हटा दें।
  • Export HAR, ताकि list की सारी requests bug report के लिए एक file में save हो जाएँ। Chrome default रूप से Cookie, Set-Cookie और Authorization headers छोड़ देता है, लेकिन request और response bodies में अब भी personal data हो सकता है।

आज़माएँ: cURL पार्सर आज़माएँ: HTTP हेडर पार्सर आज़माएँ: JSON फ़ॉर्मेटर

Application, Performance और device toolbar

Application panel दिखाता है कि site आपके browser में क्या रखती है: cookies अपने attributes (HttpOnly, Secure, SameSite, expiry; इन्हें cookies और web storage वाला lesson समझाता है) के साथ, local storage और session storage, IndexedDB और service workers। आप entries edit या delete कर सकते हैं, या site data clear करके नए सिरे से शुरू कर सकते हैं। एक आम check: logout के बाद क्या session cookie, यानी वह cookie जो आपको logged in रखती है, हट गई?

Performance panel किसी load या interaction को record करके दिखाता है कि browser का main thread क्या कर रहा था। Long tasks, यानी 50 ms से लंबे tasks, लाल रंग में marked होते हैं और layout shifts का अपना track होता है, जिससे देर से जवाब देने वाला click या उछलता content समझ आता है। आपके laptop के नतीजे lab measurements हैं, आपके users का अनुभव नहीं।

Device toolbar phone या tablet का viewport, उसका pixel ratio, touch events और device preset चुनने पर उसका user agent emulate करता है। यह layout का तेज़ पहला check है, लेकिन engine, CPU और fonts आपके desktop browser के ही रहते हैं; ज़रूरी नतीजे real device पर confirm करें। Responsive testing वाला lesson इसकी सीमाएँ "Device toolbar क्या बता सकता है और क्या नहीं" section में विस्तार से समझाता है।

आज़माएँ: कुकी एनालाइज़र

Worked example: "Profile saved", पर कुछ save नहीं हुआ

Staging पर एक tester phone number बदलकर +966 50 123 4567 करती है, Save पर click करती है और "Profile saved" देखती है; reload के बाद पुराना number लौट आता है। "Save काम नहीं करता" लिखने की बजाय वह Preserve log चालू करती है, Fetch/XHR filter चुनती है और steps दोहराती है:

  • PATCH request (किसी resource का एक हिस्सा बदलने वाला HTTP method) नया number लेकर गई: form ने input सही collect किया।
  • Server ने 422 (RFC 9110 में Unprocessable Content) लौटाया, यानी data reject किया: कुछ save नहीं हुआ, जैसा reload के बाद वाला GET पक्का करता है।
  • फिर भी page ने success दिखाया, यानी वह response status check नहीं करता; JavaScript basics वाले lesson की तरह, 4xx जवाब से fetch() fail नहीं होता। यह page का defect है।
  • क्या phone number में spaces allowed हैं? Requirement तय करेगी कि server के validation में दूसरा defect है या नहीं।
  • Report page का defect बताती है, phone format का सवाल उठाती है और screenshot, request और response attach करती है, session cookie के बिना।
Console   (no errors)

Network   Fetch/XHR, Preserve log on
  PATCH  https://staging.example.com/api/v1/profile
  Status:    422
  Payload:   {"phone":"+966 50 123 4567"}
  Response:  {"field":"phone","message":"Invalid phone format"}

  GET    https://staging.example.com/api/v1/profile    (after reload)
  Status:    200
  Response:  {"name":"Sara","phone":"+966501112233"}

आज़माएँ: HTTP स्टेटस कोड लुकअप

आम गलतियाँ

  • समस्या होने के बाद DevTools खोलना: पहले की requests record नहीं होतीं, और Preserve log के बिना navigation या redirect list मिटा देता है।
  • Status code और response की जगह screen के message पर भरोसा करना।
  • Styles pane के edit को fix मान लेना: users को अब भी shipped code ही मिलता है।
  • Console के हर message को report करना: browser extensions अपने messages जोड़ते हैं, इसलिए पहले private window या नए browser profile में reproduce करें।
  • ऐसी cURL command या HAR file attach करना जिसमें अब भी cookies, tokens या personal data हो।
  • Device toolbar या तेज़ laptop को mobile layout या speed पर आख़िरी फ़ैसला मान लेना।

QA का नज़रिया

Testers exploratory sessions के दौरान और हर बार bug reproduce करते समय DevTools खुला रखते हैं, और symptom के हिसाब से panel चुनते हैं: "कुछ नहीं होता" के लिए Console, save या show न होने वाले data के लिए Network, layout के लिए Elements, login और state के लिए Application। वे method, URL और status, संबंधित payload और response, error का exact text, browser व उसका version, और layout bug में viewport का साइज़ record करते हैं।

यह सबूत bug को सही जगह भेजता है: "request सही, server ने 500 लौटाया" back end के पास जाता है; "response सही, screen पर गलत value" front end के पास। अपनी team के साथ तय करें कि bug template में कौन-से सबूत चाहिए। DevTools production पर भी चलता है: वहाँ देखें पर कुछ न बदलें, और सिर्फ़ वही systems test करें जिन्हें test करने की आपको अनुमति है।

अभ्यास

Save न होने वाली setting की जाँच करें

आपका काम

एक साथी report करता है: "Notification settings में SMS offers बंद करना काम नहीं करता" (Chrome, staging)। आप DevTools खोलकर इसे reproduce करते हैं: "SMS offers" को untick करते हैं, Elements में checkbox चुनते हैं, Console में एक expression type करते हैं, फिर Save पर click करके "Settings saved" देखते हैं; reload के बाद box फिर से ticked है। Symptom worked example जैसा है, पर नीचे का capture वैसा नहीं है। पता करें कि defect सबसे ज़्यादा किस जगह होने की संभावना है, और report दोबारा लिखें।

Optional: जिस page को test करने की आपको अनुमति है, उस पर एक request को cURL के रूप में copy करके cURL Parser में डालें, और उसके response headers HTTP Headers Parser में paste करें।

सामग्री
Elements  (the unticked SMS checkbox, selected)
  <input type="checkbox" id="sms-offers" name="sms" checked>

Console   (no errors; typed before clicking Save)
  > $0.checked
  < false

Network   Fetch/XHR, Preserve log on
  PATCH  https://staging.example.com/api/v1/notification-settings
  Status:    200
  Payload:   {"email":true,"sms":true}
  Response:  {"email":true,"sms":true}
चरण
  1. Capture के हर block के लिए panel और उसका सवाल बताएँ।
  2. तय करें कि defect request में है, server के response में, या page के response handle करने के तरीके में, और वजह बताएँ।
  3. Bug report का title, expected result, actual result और evidence लिखें।
  4. Developer या product owner से पूछे जाने वाले सवाल लिखें।
मॉडल उत्तर दिखाएँ
मॉडल उत्तर

Panels: Elements (page पर अभी क्या है?) अब भी checked attribute दिखाता है, लेकिन DOM वाले lesson की तरह attribute सिर्फ़ शुरुआती state है। Console (क्या page का code fail हुआ?) में कोई error नहीं, यानी कोई script crash नहीं हुई; expression page से $0.checked पूछता है, यानी वह property जो current state रखती है, और उसकी value false है: box सच में untick हुआ था। Network (क्या भेजा गया और क्या लौटा?) दिखाता है कि Save ने "sms":true भेजा और server ने उन्हीं values के साथ 200 लौटाया।

जगह: request गलत है। Box untick था, फिर भी page ने "sms":true भेजा; server ने जो मिला वही store किया, इसलिए उसका 200, "Settings saved" message और reload के बाद ticked box, सब उसी request से मेल खाते हैं। Defect page (front end) में है। एक संभावित वजह, जिसे developer पक्का करे: code current state (property) की जगह शुरुआती state (attribute) पढ़ता है।

Report: title "Notification settings: SMS offers untick करना save नहीं होता, request अब भी sms:true भेजती है"। Expected result: request में "sms":false जाए और reload के बाद box unticked रहे। Actual result: "Settings saved" दिखता है, request में "sms":true जाता है और reload के बाद box फिर ticked हो जाता है। Evidence: cookies या tokens के बिना request और response, $0.checked वाली Console line, Save से पहले और reload के बाद के screenshots, browser version और staging build।

सवाल: क्या box tick करना भी इसी तरह fail होता है, और क्या email box भी ऐसा ही व्यवहार करता है? क्या mouse की तरह keyboard से toggle करने पर भी यह fail होता है? क्या कोई rule कुछ customers के लिए SMS offers चालू रखता है, और अगर हाँ, तो page "Settings saved" क्यों कहता है? यह defect marketing messages के बारे में customer की पसंद को अनदेखा करता है, इसलिए पक्का करें कि product owner इसे जल्दी देखे।

अक्सर पूछे जाने वाले सवाल

क्या DevTools इस्तेमाल करने के लिए coding आनी चाहिए?

नहीं। Network panel, Console messages और Elements tree पढ़ने के लिए इस module की web basics काफ़ी हैं। Console में छोटे expressions type करना मदद करता है, लेकिन DevTools के साथ ज़्यादातर testing काम सबूत पढ़ना, filter करना और copy करना है।

क्या production पर DevTools इस्तेमाल करना सुरक्षित है?

देखना सुरक्षित है: elements inspect करना, requests पढ़ना और performance record करना server पर कुछ नहीं बदलता। Actions का असर हो सकता है: request दोबारा भेजना, Console में code चलाना या storage edit करना आपके account से होता है, इसलिए production पर अनुमति के बिना सिर्फ़ observe करें। Elements और Styles के edits सिर्फ़ वही बदलते हैं जो आपका tab दिखाता है, लेकिन वहाँ बदला गया form submit करने पर server को असली data जाता है।

किस browser के DevTools सीखूँ?

उस browser से शुरू करें जिसे आपकी team सबसे ज़्यादा target करती है; Chrome और Edge के DevTools एक ही code से बने हैं। हर panel जिन सवालों का जवाब देता है, वे Firefox और Safari में भी वही हैं, सिर्फ़ नाम और layout अलग हैं, और cross-browser bugs के लिए आपको इनकी ज़रूरत पड़ेगी।

संदर्भ

  • What are browser developer tools? — MDNMDN Web Docs (Mozilla)ब्राउज़र में बने developer tools का परिचय — inspector, JavaScript console और debugger — टेस्ट करते समय पेज की जाँच के लिए।
  • RFC 9110: HTTP SemanticsIETF · 2022HTTP मेथड, हेडर फ़ील्ड, स्टेटस कोड और कंटेंट निगोशिएशन के अर्थ, वायर वर्ज़न से स्वतंत्र।
  • Using HTTP cookies — MDNMDN Web Docs (Mozilla)कुकी की अवधि, स्कोप, Secure/HttpOnly/SameSite एट्रिब्यूट और उनके सुरक्षा निहितार्थ।
  • ISTQB GlossaryISTQBटेस्टिंग शब्दों की मानक परिभाषाएँ — टेस्ट केस, रिग्रेशन टेस्टिंग, सेवेरिटी, प्रायोरिटी, बाउंड्री वैल्यू एनालिसिस आदि।

Mutqan tools से अभ्यास करें

cURL कमांड को मेथड, URL, हेडर और बॉडी में पार्स करें, फिर उसे fetch, axios, Python या संरचित रिक्वेस्ट में बदलें।

वेब

कच्चे HTTP रिक्वेस्ट/रिस्पॉन्स हेडर को व्याख्या सहित एक संरचित तालिका में बदलें।

वेब

Set-Cookie हेडर पार्स करें और Secure, HttpOnly, SameSite, Domain, Path, एक्सपायरी तथा साइज़ की सर्वोत्तम प्रथाएँ जाँचें।

वैलिडेशन

User-Agent स्ट्रिंग से ब्राउज़र, वर्शन, इंजन, OS, डिवाइस टाइप और बॉट की पहचान करें।

वेब

किसी भी HTTP स्टेटस कोड का अर्थ, RFC संदर्भ और उसे कब इस्तेमाल करना है — सब एक जगह देखें।

वेब

अपने ब्राउज़र में ही JSON को तुरंत फ़ॉर्मेट, सुंदर और वैलिडेट करें, मनचाहे इंडेंटेशन के साथ।

JSON और डेटा

और गहराई से

इस topic में आपकी प्रगति

QA रोडमैप का हिस्सा