XCUITest iOS, iPadOS और macOS ऐप्स के UI परीक्षण के लिए Apple का फ्रेमवर्क है, जो सीधे XCTest और Xcode में निर्मित है। यह उपयोगकर्ता क्रियाओं का अनुकरण करने की अनुमति देता है: टैप, टेक्स्ट इनपुट, स्वाइप, स्क्रॉल और जेस्चर — इंटरफ़ेस तत्वों की आंतरिक स्थिति तक पहुँच के साथ। Apple Developer Documentation, 2025 के अनुसार, XCUIApplication सभी UI परीक्षणों के लिए प्रवेश बिंदु है और स्क्रीन तत्वों के पदानुक्रम तक पहुँच प्रदान करता है।
मुख्य बिंदु
XCUITest Apple द्वारा Xcode 7 (2015) में जारी एक UI परीक्षण फ्रेमवर्क है। इसने UI Automation (UIA) को बदल दिया और Apple प्लेटफ़ॉर्म पर स्वचालित इंटरफ़ेस परीक्षण के लिए मानक उपकरण बन गया। XCUITest पूरी तरह से XCTest — Apple के एकीकृत परीक्षण फ्रेमवर्क में एकीकृत है।
यूनिट परीक्षणों के विपरीत, जो कक्षाओं और विधियों के स्तर पर तर्क की जाँच करते हैं, XCUITest क्रिया अनुकरण के माध्यम से उपयोगकर्ता इंटरफ़ेस का परीक्षण करता है। परीक्षण ऐप से अलग प्रक्रिया में चलते हैं और एक्सेसिबिलिटी API के माध्यम से इसके साथ इंटरैक्ट करते हैं — यह अलगाव और विश्वसनीयता सुनिश्चित करता है।
XCUITest को तृतीय-पक्ष सर्वर (Appium के विपरीत) या डिवाइस इंटरैक्शन के लिए अतिरिक्त लाइब्रेरी स्थापित करने की आवश्यकता नहीं है। आवश्यक सब कुछ पहले से Xcode में शामिल है। यह नए iOS संस्करणों के साथ सर्वोत्तम संगतता और नए जेस्चर और नियंत्रणों तक तत्काल पहुँच सुनिश्चित करता है।
XCUITest आर्किटेक्चर दो मुख्य कक्षाओं पर बनाया गया है: XCUIApplication — लॉन्च किया गया परीक्षण योग्य ऐप, और XCUIElement — इंटरफ़ेस तत्व। XCTest परीक्षण रनर परीक्षण जीवनचक्र का प्रबंधन करता है: setUp, परीक्षण विधियाँ, tearDown। XCUITest एक अलग प्रक्रिया के रूप में चलता है जो एक्सेसिबिलिटी ब्रिज के माध्यम से ऐप को नियंत्रित करती है।
प्रत्येक UI तत्व को XCUIElement ऑब्जेक्ट द्वारा दर्शाया जाता है, जिसमें स्थिति (exists, isHittable, label, value) और क्रियाओं (tap, pressForDuration, swipeUp, typeText) के लिए विधियाँ होती हैं। तत्व क्वेरी श्रृंखलाओं के माध्यम से पदानुक्रम में व्यवस्थित होते हैं: app.buttons[].staticTexts[].tables[]। यह स्क्रीन पर किसी भी तत्व को लचीले ढंग से खोजने की अनुमति देता है।
XCUITest तत्वों की पहचान करने के लिए एक्सेसिबिलिटी विशेषताओं का उपयोग करता है: accessibilityIdentifier — एक प्रोग्रामेटिक पहचानकर्ता, और accessibilityLabel — VoiceOver के लिए विवरण। ऐप कोड में accessibilityIdentifier सेट करने की अनुशंसा की जाती है — यह स्थानीयकरण और लेआउट से स्वतंत्र रूप से परीक्षणों को स्थिर बनाता है।
XCUITest परीक्षण XCTest सिंटैक्स का उपयोग करके Swift में लिखे जाते हैं। प्रत्येक परीक्षण वर्ग XCTestCase से इनहेरिट करता है और test से शुरू होने वाली विधियाँ रखता है। setUp विधि में ऐप आवश्यक कॉन्फ़िगरेशन के साथ लॉन्च किया जाता है, और tearDown में सफाई और सत्र समाप्ति की जाती है।
एक सामान्य परीक्षण: तत्व खोजें → क्रिया करें → परिणाम सत्यापित करें। तत्व खोज XCUIElementQuery चाइल्ड क्वेरी के माध्यम से की जाती है: app.buttons["loginButton"], app.textFields["email"]। क्रियाएँ: .tap(), .typeText("text"), .swipeUp()। सत्यापन: XCTAssertTrue(element.exists) या XCTAssertEqual(element.label, "expected")।
import XCTest
class LoginTests: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testLoginWithValidCredentials() {
let emailField = app.textFields["emailInput"]
emailField.tap()
emailField.typeText("user@test.com")
let passwordField = app.secureTextFields["passwordInput"]
passwordField.tap()
passwordField.typeText("password123")
app.buttons["loginButton"].tap()
let homeLabel = app.staticTexts["homeTitle"]
XCTAssertTrue(homeLabel.exists)
}
}
XCUITest XCTWaiter और NSPredicate प्रेडिकेट के माध्यम से स्पष्ट प्रतीक्षा का समर्थन करता है। उदाहरण के लिए, 5 सेकंड के भीतर तत्व के प्रकट होने की प्रतीक्षा: XCTWaiter().wait(for: [expectation], timeout: 5)। Detox के विपरीत, XCUITest में नेटवर्क अनुरोधों के साथ स्वचालित सिंक्रोनाइज़ेशन नहीं है।
// टाइमआउट के साथ तत्व प्रकट होने की प्रतीक्षा
let expectedElement = app.staticTexts["welcomeMessage"]
let existsPredicate = NSPredicate(format: "exists == true")
let expectation = XCTNSNotificationExpectation(object: expectedElement)
let result = XCTWaiter().wait(
for: [expectation], timeout: 5
)
XCTAssertEqual(result, .completed)
XCUITest जटिल परिदृश्यों के परीक्षण का समर्थन करता है: मल्टी-टच जेस्चर, पुश नोटिफिकेशन, डीप लिंक, SFSafariViewController और अंतर-ऐप इंटरैक्शन। Siri इंटेंट का भी Siri Remote सिमुलेशन का उपयोग करके XCUITest के माध्यम से परीक्षण किया जा सकता है।
XCUITest सभी लोकप्रिय जेस्चर का समर्थन करता है: tap, doubleTap, pressForDuration, swipeUp/Down/Left/Right, pinch, rotate, twoFingerTap। जटिल परिदृश्यों के लिए, कस्टम निर्देशांक और अवधि के साथ XCUIGesture का उपयोग किया जाता है। यह ड्राइंग या ड्रैग-एंड-ड्रॉप जैसे कस्टम जेस्चर के परीक्षण की अनुमति देता है।
Xcode 12 से शुरू होकर, XCUITest XCTestExpectation और URLProtocol के माध्यम से नेटवर्क अनुरोध इंटरसेप्शन का समर्थन करता है। यह ऐप कोड को संशोधित किए बिना ऑफ़लाइन मोड या नकली सर्वर प्रतिक्रियाओं के साथ ऐप का परीक्षण करने की अनुमति देता है।
XCUITest CI वातावरण में xcodebuild के माध्यम से test फ्लैग के साथ चलता है। कई सिम्युलेटर पर समानांतर निष्पादन के लिए, Xcode स्कीम में समानांतर निष्पादन कॉन्फ़िगरेशन के साथ xcodebuild -testPlan का उपयोग किया जाता है। GitHub Actions, Bitrise और Jenkins में XCUITest के लिए अंतर्निहित समर्थन है।
CI के लिए, कोड साइनिंग, प्रोविज़निंग प्रोफ़ाइल और गंतव्य (सिम्युलेटर या डिवाइस) कॉन्फ़िगर करने की आवश्यकता होती है। सिम्युलेटर पर iOS परीक्षणों के लिए प्रमाणपत्रों की आवश्यकता नहीं है। वास्तविक डिवाइस के लिए, Xcode Cloud या Fastlane के माध्यम से स्वचालित हस्ताक्षर आवश्यक है।
# xcodebuild के माध्यम से सिम्युलेटर पर XCUITest चलाना
xcodebuild test \
-project MyApp.xcodeproj \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' \
-resultBundlePath ./TestResults \
-parallel-testing-enabled YES \
-parallel-testing-worker-count 4
XCUITest Apple के एक्सेसिबिलिटी API से निकटता से जुड़ा है, क्योंकि तत्व खोज एक्सेसिबिलिटी विशेषताओं पर आधारित है। एक्सेसिबिलिटी परीक्षण न केवल तत्वों को खोजने का एक तरीका है, बल्कि विकलांग लोगों के लिए ऐप की पहुँच की जाँच करने का भी एक तरीका है। XCUITest accessibilityLabel, traits और hints की जाँच कर सकता है।
VoiceOver दृष्टिबाधित उपयोगकर्ताओं के लिए Apple का स्क्रीन रीडर है। XCUITest जाँच करने की अनुमति देता है: accessibilityLabel — क्या तत्व स्पष्ट पाठ में वर्णित है, accessibilityTraits — क्या तत्व प्रकार मेल खाता है (बटन, शीर्षक, छवि), और accessibilityHint — क्या यह क्रिया परिणाम के बारे में संकेत प्रदान करता है। ये जाँच App Store प्रकाशन के लिए अनिवार्य हैं, और XCUITest रिग्रेशन रन के भाग के रूप में उन्हें स्वचालित करता है।
Xcode 15 से शुरू होकर, XCUITest accessibilityAudit प्रकार के साथ XCTAttachment के माध्यम से अंतर्निहित एक्सेसिबिलिटी जाँच का समर्थन करता है। परीक्षण स्वचालित रूप से अपर्याप्त कंट्रास्ट वाले तत्वों, बिना लेबल वाली छवियों और गलत traits के बारे में रिपोर्ट करता है। यह मैनुअल एक्सेसिबिलिटी इंस्पेक्टर को बदल देता है।
// XCUITest में एक्सेसिबिलिटी ऑडिट
func testAccessibilityAudit() {
let app = XCUIApplication()
app.launch()
let audit = XCTAttachment(accessibilityAudit: app)
add(audit)
// किसी विशिष्ट तत्व की जाँच करना
let button = app.buttons["submitButton"]
XCTAssertTrue(button.label.count > 0)
XCTAssertTrue(button.isAccessibilityElement)
}
XCUITest XCTOSSignpostMetric और XCUIApplication.metrics के माध्यम से UI प्रदर्शन माप का समर्थन करता है। ऐप लॉन्च समय, नेविगेशन गति और जेस्चर प्रतिक्रिया समय को मापा जा सकता है। प्रदर्शन परीक्षण बेसलाइन माप के साथ चलते हैं और सीमा पार होने पर स्वचालित रूप से विफल हो जाते हैं। यह रिलीज़ बिल्ड में उपयोगकर्ताओं तक पहुँचने से पहले प्रदर्शन गिरावट को रोकने में मदद करता है।
बेसलाइन परीक्षण का संदर्भ निष्पादन समय है। Xcode प्रत्येक परीक्षण के लिए एक विशिष्ट डिवाइस मॉडल और iOS संस्करण पर बेसलाइन याद रखता है। यदि नया रन निर्दिष्ट प्रतिशत (डिफ़ॉल्ट 10%) से बेसलाइन से अधिक हो जाता है, तो परीक्षण विफल माना जाता है। बेसलाइन को अपडेट करने के लिए, परीक्षण रिपोर्ट में Edit Baseline कमांड का उपयोग किया जाता है। iOS संस्करण अपडेट करते समय या CI फ़ार्म के लिए डिवाइस मॉडल बदलते समय बेसलाइन की पुनर्गणना करना महत्वपूर्ण है।
XCUITest परीक्षणों की स्थिरता की निगरानी के लिए, फ़्लैग का उपयोग किया जाता है: continueAfterFailure (क्या पहली विफलता के बाद परीक्षण जारी रखना है) और पुनर्प्रयास कॉन्फ़िगरेशन के साथ Xcode परीक्षण योजनाएँ। विफल परीक्षणों (retry) के स्वचालित पुनरारंभ को कॉन्फ़िगर करने की अनुशंसा की जाती है — एनीमेशन टाइमिंग या नेटवर्क देरी से संबंधित अस्थिर परीक्षणों के लिए 3 प्रयासों तक।
XCUITest springboard और launchArguments के माध्यम से पुश नोटिफिकेशन और डीप लिंक के परीक्षण का समर्थन करता है। पुश नोटिफिकेशन के लिए, -UNUserNotificationCenter पैरामीटर के साथ XCUIApplication().launchArguments और XCTest के माध्यम से भेजने का उपयोग किया जाता है। डीप लिंक का परीक्षण कस्टम स्कीम के साथ open URL के माध्यम से किया जाता है — XCUITest सिस्टम डायलॉग को इंटरसेप्ट करता है और जाँचता है कि ऐप सही स्क्रीन के साथ खुला है या नहीं। नोटिफिकेशन प्रतिक्रिया परिदृश्य के परीक्षण के लिए, XCUIApplication().springboard का उपयोग किया जाता है, जो iOS नोटिफिकेशन सेंटर में नोटिफिकेशन बैनर पर टैप का अनुकरण करता है। ये परिदृश्य डीप लिंक और पुश अभियानों वाले ऐप्स के लिए महत्वपूर्ण हैं, जहाँ बाहरी कॉल के सही हैंडलिंग को सत्यापित करना आवश्यक है।
विस्तृत प्रदर्शन प्रोफाइलिंग के लिए, XCUITest Instruments के साथ एकीकृत होता है। परीक्षण के दौरान, XCTMetric के माध्यम से Time Profiler, Core Animation या Leaks की प्रोफाइलिंग लॉन्च की जा सकती है। प्रोफाइलिंग परिणाम रिपोर्ट में सहेजे जाते हैं और Xcode में विश्लेषण के लिए उपलब्ध होते हैं। यह ऐप लॉन्च समय, स्क्रीन के बीच नेविगेशन और एनीमेशन प्रदर्शन — iOS ऐप्स में विशिष्ट अड़चनों को अनुकूलित करने के लिए विशेष रूप से उपयोगी है।
अक्सर पूछे जाने वाले प्रश्न
XCTest सभी प्रकार के Apple परीक्षणों के लिए सामान्य फ्रेमवर्क है, जिसमें यूनिट परीक्षण और प्रदर्शन परीक्षण शामिल हैं। XCUITest UI परीक्षण के लिए XCTest के ऊपर एक विस्तार है जो इंटरफ़ेस के साथ इंटरैक्ट करने के लिए XCUIApplication, XCUIElement और XCUIElementQuery कक्षाएँ जोड़ता है।
हाँ, XCUITest Swift और Objective-C दोनों का समर्थन करता है। हालाँकि, अधिकांश Apple उदाहरण और दस्तावेज़ीकरण Swift में लिखे गए हैं। Objective-C प्रोजेक्ट बिना अतिरिक्त सेटअप के XCUITest का उपयोग कर सकते हैं — फ्रेमवर्क @import XCTest के माध्यम से उपलब्ध है।
XCUITest Apple के एक्सेसिबिलिटी API का उपयोग करता है। तत्व accessibilityIdentifier, accessibilityLabel, प्रकार (button, textField, staticText) या पदानुक्रम में स्थान द्वारा पाए जाते हैं। ऐप कोड में एक्सेसिबिलिटी विशेषताएँ जितनी सटीक होंगी, परीक्षण उतने ही स्थिर होंगे।
हाँ, Xcode में UI परीक्षणों का अंतर्निहित रिकॉर्डर शामिल है। रिकॉर्डिंग मोड में परीक्षण चलाते समय, Xcode इंटरफ़ेस के साथ सभी इंटरैक्शन कैप्चर करता है और Swift कोड उत्पन्न करता है। रिकॉर्ड किए गए कोड को परिष्कृत किया जा सकता है: सत्यापन जोड़ें, Page Objects में निकालें और पैरामीटराइज़ करें।
वास्तविक डिवाइस पर चलाने के लिए, आवश्यक है: डिवाइस को Mac से कनेक्ट करें, इसे Apple Developer Program में जोड़ें, प्रोविज़निंग प्रोफ़ाइल कॉन्फ़िगर करें, ऐप को डेवलपमेंट सर्टिफिकेट से साइन करें और xcodebuild में डिवाइस को गंतव्य के रूप में चुनें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें