2013-05-10 10 views
5

के लिए एक्सेसिबिलिटी लेबल से UIVIew प्राप्त करें मैं कार्यात्मक यूआई परीक्षण के लिए KIF Framework का उपयोग कर रहा हूं। मान लीजिए कि मैं एक मौजूदा आईपैड स्क्रीन पर हूं जहां कई विचार (लेबल, बटन, टेक्स्टफील्ड इत्यादि) में अद्वितीय पहुंच-योग्यता लेबल असाइन किए गए हैं। अगर मेरे पास accessibilityLabel स्ट्रिंग आसान है, तो क्या मैं वर्तमान स्क्रीन से संबंधित UIView का संदर्भ प्राप्त कर सकता हूं?केआईआई ऑटोमेशन

उदाहरण के लिए, [[UIView alloc] viewWithTag:5] प्रदान किए गए UIVIewtag प्रदान करता है। मैं [[UIView alloc] viewWithAccessiblityLabel:@"my label"] जैसे कुछ ढूंढ रहा हूं।

पीएस: मुझे पता है कि ब्रूट-फोर्स विधि स्वयं.subviews में सभी विचारों को दोबारा शुरू करने के लिए होगी, और मैं जो खोज रहा हूं उसे ढूंढने के लिए एक्सेसिबिलिटी लेबल की तुलना करें। मैं एक बेहतर दृष्टिकोण की तलाश में हूं।

+0

आप 'कस्टम' कक्षाओं में 'UIView'' subclass 'subivass' कर सकते हैं .. –

+0

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

उत्तर

9

मैं यूआई स्वचालन के लिए KIF का उपयोग कर रहा हूं! दिए गए अभिगम्यता लेबल से देखने के लिए यहां दिए गए कदम हैं। विधि viewContainingAccessibilityElement:element UIAccessibilityElement क्लास के लिए एक्सटेंशन विधि है।

UIAccessibilityElement *element = [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:label]; 
UIView *view = (UIView*)[UIAccessibilityElement viewContainingAccessibilityElement:element]; 
+2

मैंने अभी इस तरह की 'कीविंडो' को जोड़ा है [[[[यूआईएपीप्लिकेशन साझा अनुप्रयोग] कुंजीविंडो] अभिगम्यता एलिमेंट विथ लेबल: लेबल]; 'और यह मेरे लिए काम करता है। धन्यवाद! – KKendall

+0

यह कार्यक्षमता KIF में बनाई गई है, लेकिन बहुत खोजने योग्य नहीं है। एक आसान समाधान के लिए @ डंकन-बैबेज द्वारा टिप्पणी देखें। –

2

यह मुझे लगता है (आपकी टिप्पणी से: "मुझे UI परीक्षणों को स्वचालित करने में इस कार्यक्षमता की आवश्यकता है") जैसे कि आप accessibilityIdentifier की तलाश में हैं। प्रलेखन से:

UIAccessibilityIdentification प्रोटोकॉल का उपयोग आपके उपयोगकर्ता इंटरफ़ेस में तत्वों के साथ एक अद्वितीय पहचानकर्ता को जोड़ने के लिए किया जाता है। आप UI ऑटोमेशन स्क्रिप्ट्स में परिभाषित पहचानकर्ताओं का उपयोग कर सकते हैं क्योंकि accessibilityIdentifier का मान की name विधि के वापसी मान से मेल खाता है।

+0

धन्यवाद डेविड। यह उपयोगी है लेकिन मैं उपयोग कर रहा हूं कि केआईएफ ऑटोमेशन फ्रेमवर्क एक्सेसिबिलिटी लेबल पर आधारित है इसलिए मुझे इसका उपयोग करना होगा। – applefreak

+0

ध्यान दें कि केआईएफ ने बाद में अभिगम्यता द्वारा तत्वों को लक्षित करने की क्षमता भी जोड़ा है। –

10

वास्तव में प्राप्त करने के लिए जब यूआई स्वचालन के लिए KIF का उपयोग कर, हालांकि KIF यह स्पष्ट है कि यह संभव है नहीं है कि तुम क्या वर्णन एक अविश्वसनीय रूप से आसान तरीका है। waitForViewWithAccessibilityLabel दृश्य के लिए एक संदर्भ लौटाता है जब यह पाया जाता है:

स्विफ्ट

let view = tester().waitForView(WithAccessibilityLabel: "My label") 

ऑब्जेक्टिव-सी

UIView *view = [tester waitForViewWithAccessibilityLabel:@"My label"]; 

बेहद उपयोगी है, एक बार की खोज की।

+0

यह बहुत अच्छा काम किया! –

+0

लेकिन यदि दृश्य मौजूद नहीं है तो यह विफल हो जाता है। क्या इसके लिए पूछने का कोई तरीका है और नहीं मिला अगर विफल नहीं है? – zaxy78

+0

मुझे दृश्य के लिए पूछने के तरीके से अवगत नहीं है, लेकिन अगर यह नहीं मिला है तो यह असफल नहीं है, और जैसा कि आपने स्पष्ट रूप से पाया है, "प्रतीक्षाफोर व्यूविथएसिबिबिलिबल लेबल" समय समाप्त हो जाएगा यदि दृश्य मौजूद नहीं है तो परीक्षण विफल हो जाएगा। यह इस दृष्टिकोण के लिए एक नकारात्मक पक्ष है। –

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