2015-10-27 13 views
17

द्वारा चलाए जाने पर पाठ दृश्य में पाठ टाइप करता है मेरे पास निम्न XCTest UI परीक्षण है जो पाठ दृश्य में टेक्स्ट टाइप करता है।यूआई परीक्षण विफल रहता है जब यह एक एक्सकोड बॉट

let textView = app.textViews.elementBoundByIndex(0) 
textView.tap() 
textView.typeText("Hello world") 

जब एक Xcode बॉट के रूप में चलाने यह typeText कॉल के लिए निम्न त्रुटि दर्शाता है।

अभिकथन: यूआई परीक्षण विफलता - विफल रहा है: महत्वपूर्ण घटना के लिए समय खत्म हो गया

enter image description here

दिलचस्प बात यह है कि जब मैं एक ही कंप्यूटर पर Xcode से मैन्युअल रूप से इसे चलाने के परीक्षण में सफ़ल पूरा करने के लिए । एक्सकोड 7.1/आईओएस 9.1 में अपग्रेड करने से पहले यह परीक्षण एक्सकोड बॉट में भी पारित हुआ। समस्या का स्रोत क्या हो सकता है?

यहाँ यूआई परीक्षण के साथ एक अलग डेमो है: https://github.com/exchangegroup/UITestTextViewDemo

आईओएस 9.1 सिम्युलेटर, ओएस एक्स 10.11.1 (15B42), Xcode 7.1 (7B91b), OS X सर्वर 5.0.15 (15S4033)

ऐप्पल को रिपोर्ट किया गया।

+2

ऐप्पल ने बॉट्स के लिए एक्ससी 7.1/आईओएस 9.1 अपडेट के साथ कुछ खराब कर दिया। हमारे हरे रंग का टेस्ट सूट एक पल में लाल हो गया। इस त्रुटि के साथ विफल, "स्क्रीनशॉट के लिए टाइमआउट प्रतीक्षा" या "सिम शुरू करने का टाइमआउट"। मुझे उम्मीद है कि एक्ससी 7.2 इसे ठीक करेगा। –

+2

मुझे एक ही समस्या दिखाई दे रही है। मुझे नहीं लगता कि मेरे पास "ठीक" है, लेकिन मुझे पता चला है कि अगर मैं थोड़ा और इंतजार करता हूं, तो कभी-कभी परीक्षण पास हो जाएगा। मेरा विशेष मुद्दा WKWebView के साथ है जिसमें एक आंतरिक "सामग्री संपादन योग्य" फ़ील्ड है, लेकिन यहां सिद्धांत समान है। संपादक पर 'टैप' के बाद, मैं रन-लूप प्रतीक्षा करता हूं: NSRunLoop.currentRunLoop()। RunUntilDate (NSDate (timeIntervalSinceNow: 3)) –

+0

कुछ नया? मुझे xcode 7.3.1 – emoleumassi

उत्तर

7

मुझे अपने मामले के लिए एक समाधान मिला और मुझे उम्मीद है कि यह आपकी मदद भी करेगा।

मेरे setUp() और tearDown() में (मुझे लगता है कि अनावश्यक लगता है) मैंने XCUIApplication().terminate() डाल दिया। यह सुनिश्चित कर रहा है कि अगले परीक्षण को चलाने से पहले ऐप को समाप्त कर दिया गया हो और ऐसा लगता है कि यह काम कर रहा है।

override func setUp() { 
    XCUIApplication().terminate() 
    super.setUp() 
    continueAfterFailure = false 
    XCUIApplication().launch() 
} 
override func tearDown() { 
    super.tearDown() 
    XCUIApplication().terminate() 
} 

मैं एप्पल के साथ लेकिन कुछ समय के यह मेरे त्रुटि है कि आप देख रहे थे चारों ओर हो रही है के लिए एक बग दायर किया। उम्मीद है की वो मदद करदे!

3

मुझे एक और समाधान मिला, क्योंकि कोनोर द्वारा प्रस्तावित एक मेरे लिए काम नहीं कर रहा था: मुझे एक्सकोड बॉट पर यूआईटीएस्ट का उपयोग करके बहुत सारी समस्याएं थीं, और आम लक्षण यह था कि सिम्युलेटर पर परीक्षण ने और अधिक समय लिया स्थानीय मशीन की तुलना में, इसलिए मैंने सोचा कि _xcsbuildd उपयोगकर्ता परीक्षण चलाने के लिए उपयोग किया जाता था किसी भी तरह से धीमा हो गया था।

मेरा समाधान सरल है: केवल _xcsbuildd उपयोगकर्ता को "सामान्य" उपयोगकर्ता होने के लिए प्रोत्साहित करें। इसका एक और फायदा है: यदि आप चाहते हैं कि आप उस उपयोगकर्ता के साथ लॉगिन कर सकें और एकीकरण के दौरान सिम्युलेटर में चल रहे परीक्षण देखें, तो डीबग करना आसान है!

यहाँ है कैसे मैंने किया:

sudo dscl . -passwd /Users/_xcsbuildd 

, वैसे भी आप चाहिए मैं उपयोगकर्ता तेजी से लॉगिन विंडो में दिखाने बनाने के लिए सक्षम नहीं था:

sudo dscl . -create /Users/_xcsbuildd UserShell /bin/bash 
sudo dscl . -create /Users/_xcsbuildd FirstName Xcode 
sudo dscl . -create /Users/_xcsbuildd LastName Server 
sudo dscl . -create /Users/_xcsbuildd FullName "Xcode Server" 
sudo dscl . -create /Users/_xcsbuildd PrimaryGroupID 20 

फिर से पासवर्ड बदलने एक "अन्य उपयोगकर्ता" देखें जहां आप उपयोगकर्ता नाम "_xcsbuildd" डाल सकते हैं और आपके द्वारा चुने गए पासवर्ड को

14

मेरा मानना ​​है कि अंतर्निहित समस्या यह है कि "कनेक्ट हार्डवेयर कीबोर्ड" डिफ़ॉल्ट रूप से चालू होता है। यहां तक ​​कि यदि आप इसे मुख्य उपयोगकर्ता के लिए बंद कर देते हैं, तो _xcsbuildd उपयोगकर्ता अभी भी डिफ़ॉल्ट का उपयोग करता है।मैं निम्नलिखित स्क्रिप्ट के साथ योजना के लिए एक पूर्व परीक्षण कार्रवाई जोड़कर समस्या को हल करने में सक्षम था:

if [ `defaults read com.apple.iphonesimulator ConnectHardwareKeyboard` -eq 1 ] 
then 
    defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false 
    killall "Simulator" 
fi 

enter image description here

+1

में एक ही समस्या है स्क्रिप्ट वास्तव में उपयोगी है, मुझे हमेशा अपने देव मशीन पर परीक्षण चलाने के दौरान हार्डवेयर कीबोर्ड को अक्षम करना याद रखना होगा। मैंने कभी भी Xcode सर्वर पर इस समस्या का अनुभव नहीं किया है, लेकिन यह सुनिश्चित करना उपयोगी है कि यह सुनिश्चित करने के लिए काम करता है। –

1

मैं भी इस मुद्दे का सामना किया। मैंने स्नैपशॉट (फास्टलेन) के साथ स्क्रीनशॉट को कैप्चर करने के लिए एक यूआई परीक्षण लिखा है और यह आईपैड एयर & प्रो सिम्युलेटर पर ठीक चलता है। हालांकि, एक आईपैड रेटिना या आईपैड 2 सिम्युलेटर पर मुझे यह त्रुटि संदेश मिलता है, या तो कमांड लाइन से या सीधे एक्सकोड से चल रहा है।

मेरे मामले में एक समाधान टाइपटेक्स्ट() कथन के बीच कुछ नींद() फ़ंक्शंस जोड़ना था और त्रुटि दूर हो गई थी।

संपादित करें: यह केवल एक्सकोड से मैन्युअल रूप से चलने वाले फिक्स को कमांड लाइन के माध्यम से चलाता है, यह अभी भी परीक्षण विफलता का कारण बनता है। मैंने यह भी देखा कि यह 64-बिट उपकरणों के लिए सभी सिमुलेटर पर काम करता है, लेकिन पहले के उपकरणों पर नहीं।

संपादित 2: https://stackoverflow.com/a/36334816/5334132: मैं के रूप में इस सवाल का जवाब में उल्लेख किया है, आईओएस 9.3 के बजाय आईओएस 9.0 सिम्युलेटर का उपयोग करके इस समस्या के समाधान के लिए एक रास्ता मिल गया। यह एक अच्छा कामकाज लगता है जब तक कि यह एक्सकोड के एक नए संस्करण में तय नहीं हो जाता है।

0

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

उन दो सेटिंग्स के साथ, मुझे अभी भी कुछ यादृच्छिक UI परीक्षण विफलताओं मिलती हैं। हार्डवेयर मॉनीटर या स्क्रीन शेयरिंग को कनेक्ट करना ताकि स्क्रीन पर सिम्युलेटर खींचा जा सके, हालांकि उनको हल करने के लिए कहीं ऐसा लगता है।

0

मैं xcode 8.2.1 का उपयोग कर रहा हूं और आईओएस 9.3 संस्करणों पर परीक्षण चला रहा हूं। एक साधारण हैक टेक्स्ट बॉक्स पर टैप करने और इसे टाइप करने से पहले 2-5 सेकेंड के लिए नींद जोड़ना है। हालांकि, यह एक स्थायी समाधान नहीं है।

एक और विश्वसनीय समाधान

सभी का चयन रद्द परीक्षण चलाने से पहले सेटिंग्स में सभी कुंजीपटल प्राथमिकताएँ।

"KeyboardAllowPaddle": false, 
"KeyboardAssistant": false, 
"KeyboardAutocapitalization": false, 
"KeyboardAutocorrection": false, 
"KeyboardCapsLock": false, 
"KeyboardCheckSpelling": false, 
"KeyboardPeriodShortcut": false, 
"KeyboardPrediction": false, 
"KeyboardShowPredictionBar": false 
संबंधित मुद्दे