2012-01-13 15 views
5

मैं निम्नलिखित संरचना के साथ एक दृश्य है:कैसे UIAutomation निर्धारित करता है कि क्या एक UIAElement.isVisible()

GrandView 
-Parent View1 
-Parent View2 
--Child View1 
--Child View2 

बच्चे विचारों लगभग सभी Parent View2 की सीमा से ऊपर ले, लेकिन अभी भी कुछ जगह के आसपास है किनारे। अगर मैं किनारों पर क्लिक करता हूं तो मैं एक्सेसिबिलिटी इंस्पेक्टर के साथ सिम्युलेटर में Parent View2 का चयन कर सकता हूं।

tapWithOptions({tapOffset:{x:0.15, y:0.95}}); 

हालांकि, isVisible() मेरे कॉल हमेशा 0 वापसी: अगर मैं का उपयोग मैं भी UIAutomation में Parent View2 टैप कर सकते हैं। मुझे उम्मीद है कि अगर मैं तत्व को टैप कर सकता हूं, या इसे एक्सेसिबिलिटी इंस्पेक्टर के साथ चुन सकता हूं, तो इसे 1 वापस करना चाहिए।

UIAutomation कैसे निर्धारित करता है कि UIAElement दिखाई दे रहा है?

उत्तर

0

यदि यह एक UIView है, तो इसे hidden संपत्ति को संचालित किया जाना चाहिए। यदि यह एक दृश्य नहीं है, और यह एक कंटेनर है, तो इसे accessibilityElementsHidden द्वारा संचालित किया जाना चाहिए।

सामान्य रूप से, आप इसे यूआईयूटोमेशन के लिए उपयोग नहीं करना चाहते हैं। इसके बजाए, जो कुछ भी आप दृश्य पर करने जा रहे थे - इस मामले में, एक टैप() - आगे बढ़ें और इसे करें, और सिस्टम को त्रुटि होने पर त्रुटि दें। आम तौर पर यह वह मॉडल है जिसे आप अपनी स्क्रिप्ट में अनुसरण करना चाहते हैं, यह जांचने के बजाय कि पहले कुछ उपलब्ध है या नहीं। साइन यूआईयूटॉमेशन डीओएम यूआईएफ़ेबिलिटी सूचना को स्क्रिप्ट कर रहा है, जब एनिमेटेड व्यू संक्रमण जैसी चीजें चीजें सिंक हो जाती हैं। कभी-कभी स्क्रिप्ट यूआई एनिमेट्स से तेज़ी से निष्पादित होती है, और कभी-कभी विपरीत! waitForInvalid आपके लिए समाधान के लिए शॉर्टकट हो सकता है।

यूआईयूटोमेशन के लिए एलेक्स वोल्मर की tuneup.js लाइब्रेरी लेखन परीक्षणों को अधिक आसान बनाता है, और विस्तार करना आसान है। https://github.com/alexvollmer/tuneup_js

+0

मैं इसे अपने प्रश्न से निहित 'छिपी हुई' और 'पहुंच-योग्यता एलिमेंट्स' के अलावा अन्य चीज़ों द्वारा संचालित देख रहा हूं। मैं यह सुनिश्चित करने के लिए 'isVisible()' संपत्ति पर जोर देना चाहता हूं कि कंटेनर की सामग्री को जांचने के बिना एक कंटेनर मौजूद है, जो बदल सकता है। –

0

आपके द्वारा किसी तत्व के विरुद्ध किए जाने वाले प्रत्येक ऑपरेशन में टाइमआउट होता है। यह एप्पल प्रलेखन से स्पष्ट नहीं है, लेकिन अगर आप को देखो: setTimeout, यह हमें बताता है:

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

setTimeout स्वयं केवल डिफ़ॉल्ट मान (जैसे पुश और पॉप) बदलता है। आप वास्तव में क्या करना चाहते हैं वह आपके विचार पर आपकी कार्रवाई करता है, और समय-समय पर विफल रहता है यदि यह कभी भी उपलब्ध नहीं होता है (डिफ़ॉल्ट टाइमआउट 5 सेकंड होता है)।
डब्ल्यूडब्ल्यूडीसी 2010 सत्र "इंस्ट्रूमेंट्स यूजर इंटरफेस टेस्टिंग इन इंस्ट्रूमेंट्स" इस में थोड़ा सा जाता है, यह एडीसी WWDC 2010 पेज पर वीडियो और स्लाइड दोनों के साथ उपलब्ध है। आपके मामले में, आप अपने दृश्य पर टैप() निष्पादित करना चाहते हैं। यदि, किसी कारण से, यह दृश्य 5 सेकंड के भीतर UIAutomation के लिए उपलब्ध नहीं है, तो आपको अपवाद देखना चाहिए। ऐसा करके टाइमआउट को बदलने के साथ
प्रयोग:

var oldTimeout = target.timeout(); target.pushTimeout(10);

अपने कोड से पहले, और

target.popTimeout(oldTimeout);

के बाद।

+0

लेकिन फिर से, मैं अपने दृश्य पर 'टैप() 'निष्पादित नहीं कर सकता। जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मैं केवल 'टैपविथऑप्शन() 'निष्पादित कर सकता हूं। हालांकि, मैं अपने विचार को टैप() 'नहीं करना चाहता हूं क्योंकि इससे उन कार्यों को शुरू किया जाएगा जिनकी मुझे परवाह नहीं है। मैं सिर्फ यह जानना चाहता हूं कि यह मौजूद है और टैप करने योग्य है। –

+0

फिर टैप() के बजाय, नाम() जैसी विधि तक पहुंचें। दोबारा, आप उस कार्रवाई को समय-समय पर इंतजार कर रहे हैं। आप वास्तव में क्या खोज रहे हैं "क्या यह दृश्य इस समय अवधि के भीतर उपलब्ध है"। यदि कॉल() समय का नाम है, तो यह उपलब्ध नहीं है। यदि आपका दृश्य उपलब्ध होने के लिए डिफ़ॉल्ट 5 सेकंड से अधिक समय ले रहा है, तो टाइमआउट का विस्तार करने के लिए पुशटाइमआउट और पॉपटाइमआउट का उपयोग करें। वह tapWithOptions काम करता है कोई आश्चर्य नहीं है, दृश्य मौजूद है लेकिन अभी तक इसके पदानुक्रम के हिस्से के रूप में स्वचालन के लिए उपलब्ध नहीं है (यानी ऑब्जेक्ट रिज़ॉल्यूशन अभी तक नहीं किया गया है) – quellish

+0

आपका क्या मतलब है "ऑब्जेक्ट रिज़ॉल्यूशन अभी तक नहीं किया गया है"? –

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