2016-11-17 11 views
8

में हाल ही के से यह फिर से शुरू करने मैं अपनी समस्या का समाधान में मैं एक विशेष समय अंतराल के बाद पृष्ठभूमि और यह हाल ही के से फिर से लांच करने के लिए अपने एप्लिकेशन भेजने की जरूरत है, जहां के लिए देख रहा था। निष्क्रियivAppForDuration() को उपकरण UIAutomation में प्राप्त करने के लिए उपयोग किया गया था। क्या कोई जानता है कि XCTest में इसे कैसे प्राप्त किया जाए?एप्लिकेशन XCTest

+0

आप प्रवाह को रिकॉर्ड करने का प्रयास कर सकते हैं, जिससे आपको यह हासिल करने का एक अच्छा विचार मिलना चाहिए। पृष्ठभूमि को ऐप भेजने के बाद रिकॉर्डिंग रुक जाएगी नहीं। फिर नींद (एन) अपने परीक्षण निष्पादन या प्रेषण के बाद जब तक कि आप इसे वापस अग्रभूमि (और रिकॉर्डिंग बंद करें) – dogsgod

+0

तक कोशिश की, मैंने कोशिश की। रिकॉर्डिंग करते समय पृष्ठभूमि में जाने के बाद, यह XCUIAplication() के तत्वों का उपयोग करके हालिया ऐप्स से ऐप तक पहुंचता है (यह रिकॉर्डर के लिए प्रतीत होता है। सिस्टम ui अब XCUIAplplication बन गया है)। इसलिए रिकॉर्डिंग चलाने की कोशिश करते समय, यह एक त्रुटि देता है। यदि आप ऐप छोड़ते हैं तो मूल रूप से आप अपने ऐप के XCUIAplication संदर्भ को खो देते हैं। – rachit

+0

@rachit ने आपके लिए नीचे दिए गए समाधान का समाधान किया है? – user3353890

उत्तर

6

यह सकारात्मक नहीं होगा अगर यह काम करेगा, क्योंकि मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन यह एक शॉट के लायक है। यदि कुछ और नहीं है तो आपको यह देखना चाहिए कि कहां देखना है। https://developer.apple.com/reference/xctest/xcuidevicebutton

आप के साथ इन का उपयोग कर सकते हैं: https://developer.apple.com/reference/xctest/xcuiapplication

XCUIDevice वर्ग आप डिवाइस पर एक बटन दबाने की अनुकरण करने के लिए अनुमति देता है:

XCUIApplication वर्ग दोनों समाप्त कर देंगे और प्रोग्राम के रूप में अपने एप्लिकेशन लॉन्च करने की विधियां उपलब्ध कराता UIControl और NSURLSessionTask आपके एप्लिकेशन को निलंबित करने के लिए।

इस प्रक्रिया स्विफ्ट 3 का उपयोग कर कुछ इस तरह (सिंटेक्स स्विफ्ट 2 और नीचे के लिए थोड़ा अलग हो सकता है) दिखाई देती हैं इसका एक उदाहरण:

func myXCTest() { 

    UIControl().sendAction(#selector(NSURLSessionTask.suspend), to: UIApplication.shared(), for: nil) 

    Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false) 
} 

func launchApp() { 
    XCUIApplication().launch() 
} 

एक और तरीका है बस एक घर बटन प्रेस को क्रियान्वित किया जा सकता है, और फिर ऐप्स को दोबारा लॉन्च एक टाइमर गुजरता के बाद:

func myXCTest { 

    XCUIDevice().press(XCUIDeviceButton.Home) 

    Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false)  
} 

न तो इन तरीकों से आप क्या कह रहे हैं कर सकते हैं, या पूरी तरह से काम है, लेकिन उम्मीद है कि, यह आप एक प्रारंभिक बिंदु दे देंगे की। आप इसके साथ खेल सकते हैं और एक समाधान ढूंढ सकते हैं जो आपके लिए काम करता है। सौभाग्य!

+0

मैंने कोशिश की, घर बटन दबाए जाने के बाद ऐप को पृष्ठभूमि में ले जाया गया। लेकिन निलंबन समारोह ऐप को फिर से अग्रभूमि में लाने में सक्षम नहीं था। – rachit

+0

तो टाइमर ने उलटी गिनती नहीं की और ऐप को फिर से लॉन्च किया? – user3353890

+0

क्या यह समाधान किसी के लिए काम करता है? मुझे पता है कि इसमें 4 वोट हैं लेकिन क्या यह वास्तव में काम करता है? टिप्पणियों के आधार पर, यह स्पष्ट नहीं है। धन्यवाद। – rfodge

1

आप अपने वर्तमान परीक्षण के साथ Xcode 8.3 और iOS 10.3 का उपयोग कर सकते हैं, तो आप इस की कोशिश करना चाहते हो सकता है:

XCUIDevice.shared().press(XCUIDeviceButton.home) 
sleep(60) 
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {appName}") 

अपने टेस्ट स्वीट फ़ाइल के शीर्ष पर @available(iOS 10.3, *) शामिल करना न भूलें।

यह अपेक्षाकृत deactivateAppForDuration() के बराबर होगी। बस अपनी वांछित अवधि में sleep() बदलें।

संबंधित मुद्दे