2015-12-03 21 views
13

मैं सिर्फ XCode 7 में यूआई का परीक्षण आरंभ दौरान स्विफ्ट ऐप में कीबोर्ड छिपाने के लिए और इस समस्या को हिट करने के लिए:कैसे यूआई परीक्षण

मैं किसी पाठ फ़ील्ड में पाठ दर्ज करने के लिए और फिर एक बटन पर क्लिक करें की जरूरत है। दुर्भाग्य से यह बटन कीबोर्ड के पीछे छिपा हुआ है जो टेक्स्टफील्ड में टेक्स्ट दर्ज करते समय दिखाई देता है। एक्सकोड इसे दृश्यमान बनाने के लिए स्क्रॉल करने का प्रयास कर रहा है लेकिन मेरा विचार स्क्रोल करने योग्य नहीं है, इसलिए यह विफल हो जाता है।

let textField = app.textFields["placeholder"] 
    textField.tap() 
    textField.typeText("my text") 
    app.childrenMatchingType(.Window).elementBoundByIndex(0).tap() // hide keyboard 
    app.buttons["hidden button"].tap() 
क्योंकि मेरे ViewController छूता अवरोध उत्पन्न कर रहा है

मैं यह कर सकता:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    view.endEditing(false) 
    super.touchesBegan(touches, withEvent: event) 
} 

मैं अपने समाधान के बारे में वास्तव में खुश नहीं हूँ, वहाँ किसी अन्य तरीके से कैसे है

मेरे वर्तमान समाधान यह है यूआई परीक्षण के दौरान कीबोर्ड छुपाने के लिए?

+0

तो यू मुद्दा है कीबोर्ड के साथ बटन छुपाता है, यू बस बटन तक 'setContentOffset' के साथ पूरे दृश्य को धक्का कर सकते हैं दृश्यमान है, इससे कोई फर्क नहीं पड़ता कि आपका दृश्य स्क्रॉल करने योग्य है या – Tj3n

+2

1 नहीं है।यदि कीबोर्ड दिखाई देने पर आप किसी बटन तक नहीं पहुंच पा रहे हैं, तो क्या यह एक यूएक्स समस्या नहीं है? 2. ये सिर्फ परीक्षण हैं। टेस्ट से हैकी कोड होने की उम्मीद है इसलिए मुझे नहीं पता कि आपकी समस्या क्या है :) अगर यह काम करता है तो बस इसे छोड़ दें। –

उत्तर

2

आपके प्रश्न का उत्तर आपके परीक्षण कोड में नहीं है, लेकिन आपके ऐप कोड में है। यदि कोई उपयोगकर्ता ऑन-स्क्रीन सॉफ़्टवेयर कीबोर्ड का उपयोग करके टेक्स्ट दर्ज नहीं कर सकता है और फिर बटन पर टैप कर सकता है, तो आपको या तो कीबोर्ड को खारिज कर देना चाहिए (उपयोगकर्ता को बटन पर टैप करने के लिए, या दृश्य स्क्रॉल करने योग्य बनाना चाहिए) ।

+0

"परीक्षण को कीबोर्ड को खारिज कर दें" - क्या आपके पास यह पूरा करने के लिए कोई सुझाव है? XCUIElement में इस्तीफा देने के लिए ऐसी कोई धारणा नहीं है फर्स्ट रेस्पॉन्डर। – Rayfleck

+0

app.keyboards.buttons ["कीबोर्ड छुपाएं"] टैप करें() – Rayfleck

+0

मुझे विश्वास है कि आप इसे छुपाने के लिए कीबोर्ड से दूर टैप कर सकते हैं। App.tap() या app.swipeDown() जैसी कुछ ऐसा करना चाहिए। – caffeinum

1

बस यह सुनिश्चित कर लें कि परीक्षण चलाने से पहले कीबोर्ड सिम्युलेटर में बंद हो गया है।

हार्डवेयर-> कीबोर्ड-> हार्डवेयर कीबोर्ड से कनेक्ट करें।

फिर पेस्ट बोर्ड

textField.tap() 
UIPasteboard.generalPasteboard().string = "Some text" 
textField.doubleTap() 
app.menuItems["paste"].tap() 
+0

नीचे वोट क्यों? – 365SplendidSuns

10

का उपयोग कर अपने पाठ दर्ज आप FirstResponder इस्तीफा देने के लिए अपने पाठ क्षेत्रों की स्थापना की है, तो textFieldShouldReturn() प्रतिनिधि विधि में, तो

textField.typeText("\n") 
(या तो textField.resignFirstResponder() या self.view.endEditing(true) के माध्यम से)

यह करेगा।

3

Joe's blog के लिए एक प्रश्न के आधार पर, मैं एक मुद्दा है, जिसमें सिम्युलेटर पर कुछ रन के बाद कीबोर्ड कोड के इस टुकड़े का उपयोग कर छिपाने के लिए विफल रहता है है:

XCUIApplication().keyboard.buttons["Hide keyboard"] 

तो, मैं यह करने के लिए बदल दिया है: (धन्यवाद जो)

XCUIApplication().keyboard.buttons["Hide keyboard"] 
let firstKey = XCUIApplication().keys.elementBoundByIndex(0) 
if firstKey.exists { 
    app.typeText("\n") 
} 

यदि कुंजीपटल चित्र नल के बाद खुला छिपाने बटन, अगर यह है, मैं टाइप "\ n" है, जो मेरे मामले में भी कीबोर्ड बंद हो जाता क्या मैं यहाँ करने की कोशिश पता लगा रहा है।

यह भी मुश्किल होता है, क्योंकि कभी-कभी सिम्युलेटर कुंजीपटल टाइपिंग का ध्यान खो देता है और इससे परीक्षण विफल हो सकता है, लेकिन मेरे अनुभव में विफलता दर मेरे द्वारा उठाए गए अन्य दृष्टिकोणों से कम है।

मुझे आशा है कि इससे मदद मिल सकती है।

+0

सभी मामलों में ठीक काम करना –

2

मैं हमेशा प्रोग्राम के रूप में स्विफ्ट UITesting में कीबोर्ड छिपाने के लिए इस का उपयोग करें:

XCUIApplication().keyboards.buttons["Hide keyboard"].tap() 
+0

आईफोन पर मेरे लिए काम नहीं करता है। क्या यह केवल आईपैड हो सकता है? –

+0

'XCUIAplication' के प्रकार का कोई सदस्य 'कीबोर्ड' नहीं है। @charlieSeligman क्या कोड डिवाइस या कोड में काम करता है केवल सिम्युलेटर के लिए काम करता है? –

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