c# - यह निर्धारित नहीं किया जा सकता है कि क्या मेरे वेब ऐप में एक निश्चित यूआईटीईस्टकंट्रोल मौजूद है




web-applications visual-studio-2012 (2)

Obj.Exists () का उपयोग करने के बजाय हमने अपनी मौजूद विधि को कोडित किया है जो कि EnsureClickable () और BoundingRectangle.Width > 0 के एक संयोजन दृष्टिकोण का उपयोग करता है, यह सुनिश्चित करने के लिए कि नियंत्रण स्क्रीन बिंदु है

ईटीए- ओह, माफ करना एक महत्वपूर्ण हिस्सा छोड़ दिया। जोड़ने के लिए अपडेट किया गया है यह सुनिश्चित करने के लिए कि यह 0 से अधिक है, यदि आपको चौड़ाई कोई काम नहीं कर रही है, तो आपको लंबाई का उपयोग करने की आवश्यकता हो सकती है।

मैं वर्तमान में एक वेब अनुप्रयोग के लिए सी # का उपयोग करके कुछ कोडित UI परीक्षणों को स्वचालित करने में मदद करने का प्रयास कर रहा हूं। मुझे अक्सर सामना करना पड़ रहा है यह है कि यह निर्धारित करना बेहद मुश्किल हो सकता है कि क्या UITestControl ऑब्जेक्ट पृष्ठ पर मौजूद है या नहीं। दुर्भाग्य से, कोडित यूआई परीक्षणों के बारे में कुछ के लिए माइक्रोसॉफ्ट के एमएसडीएन वेबसाइट पर प्रलेखन व्यावहारिक रूप से गैर-मौजूद है ( यहां देखें UITestControl लिए उनका पेज )।

असल में मैं क्या पूछ रहा हूं:

  • यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि क्या UITestControl पृष्ठ पर मौजूद है या नहीं?
  • UITestControl.Exists संपत्ति कैसे काम करता है?
  • UITestControl.Find() विधि क्या करता है?
  • UITestControl.TryFind() विधि कैसे काम करती है?

मैंने इसे कैसे संभाला है:

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

सबसे पहले मैंने जांच की कोशिश की कि क्या UITestControl.Exists संपत्ति सही थी, लेकिन समय के साथ और इसके साथ दूसरे लोगों के अनुभव से परामर्श किया, यह स्पष्ट हो गया कि यह हमेशा सच देता है, भले ही ब्राउज़र खुला न हो। चूंकि जो विकल्प सबसे स्पष्ट दिख रहा था वह काम नहीं कर रहा था, इसलिए मैंने UITestControl.Find()UITestControl.Find() विधि का उपयोग करने की कोशिश की, लेकिन जब से इसमें कोई तर्क नहीं होता है और कोई रिटर्न नहीं देता, तब तक मुझे पता नहीं था कि उसने क्या किया। मैंने UITestControl.TryFind() पद्धति का उपयोग करने की कोशिश की, और कभी-कभी यह काम करती थी, लेकिन मुझे पता चला कि जब मैं सही पृष्ठ पर नहीं था, तो मुझे केवल झूठी वापसी करना प्रतीत होता था; यह हमेशा अन्यथा सच सच में लौटे। स्पष्ट रूप से मुझे पता नहीं था कि यह कैसे काम करता है, और इसे एक परीक्षण के रूप में उपयोग नहीं करना चाहिए।

मुझे लगा कि अगर मैं अपनी नौकरी करने के लिए प्रदान की गई विधियों को नहीं मिल सका, तो मुझे अपने उपकरण बनाने की कोशिश करनी होगी। मैं सबसे हाल ही में Mouse.Hover(UITestControl) का प्रयोग करने की कोशिश की। Mouse.Hover(UITestControl) एक कोशिश / पकड़ ब्लॉक में निर्धारित करने के लिए कि नियंत्रण इतना मौजूद है:

public bool DoesExist(UITestControl control){
   if(control == null)
      return false;

   try{ Mouse.Hover(control); }
   catch (UITestException)
   {
      return false;
   }

   return true;
}

यह कभी-कभी काम करता है, लेकिन कुछ स्थितियों में ऐसा लगता है कि मुझे समझ में नहीं आ रहा है इसलिए झूठी सकारात्मक वापस लौटते हैं। मैं अभी भी अंधा उड़ रहा हूं, और मैं लगभग विचारों से बाहर हूं।

मैं विजुअल स्टूडियो 2012 और माइक्रोसॉफ्ट। नेट फ्रेमवर्क संस्करण 4.5.5070 9 का उपयोग कर रहा हूं।


Find() और TryFind() विधियों के बारे में आंशिक उत्तर

नियंत्रण के लिए क्लास इंस्टालेशन में विभिन्न खोज गुणों को सेट करने के बाद, Find() विधि मैच के लिए एक नियंत्रण के लिए वास्तविक खोज करता है। SearchProperties उपयोग करने के लिए प्रयोग किया जाता है और एक नियंत्रण खोजने के लिए। यदि कोई नियंत्रण नहीं मिले तो खोज विफल हो जाती है - भूल जाओ कि वास्तव में क्या होता है, संभवतः एक अपवाद फेंक जाता है, लेकिन दस्तावेज़ीकरण यह नहीं बताता है। यदि एक नियंत्रण पाया जाता है कि Find() पूर्ण हो जाता है यदि दो या अधिक पाए जाते हैं तो एक को मिला नियंत्रणों की संख्या को कम करने के लिए FilterProperties का उपयोग करके जारी रहती है

कोडित यूआई रिकॉर्डर शैली का कोड UIControl aControl = this.UIMap.uione.uitwo.uithree; उत्पन्न करता है UIControl aControl = this.UIMap.uione.uitwo.uithree; जो कि uitwo को एक नियंत्रण के संदर्भ में मान कैसे मिलता है जैसे कि uitwo को uitwo जा सकता है? मैंने जो एकमात्र उत्तर पाया है, वह http://blogs.msdn.com/b/balagans/archive/2009/12/28/9941582.aspx के विवरण भाग में है, जो कहता है " नियंत्रण के लिए खोज शुरू होती है (खोजें द्वारा स्पष्ट () या कार्रवाई या संपत्ति के सत्यापन में नियंत्रण के किसी भी उपयोग से निहित) "।

तो Find() एक नियंत्रण की खोज करता है और उसे स्पष्ट रूप से या निहित कहा जा सकता है

TryFind() मूल रूप से Find() के समान है, सिवाय इसके कि यह एक बूलियन देता है जो दिखाता है कि नियंत्रण मिला था या नहीं। दोबारा, दस्तावेज़ीकरण खराब है, लेकिन मेरा मानना ​​है कि TryFind() true देता true अगर बिल्कुल एक नियंत्रण मिला है, अन्यथा false है।

एक और उपयोगी खोज पद्धति है FindMatchingControls जो खोज मानदंड से मेल खाने वाले सभी नियंत्रणों का एक (संभवतः रिक्त) संग्रह देता है।

Yonitdm के उत्तर के अनुसार, BoundingRectangle का उपयोग करने से कई मदों की मदद मिल सकती है, लेकिन अधिकांश डिस्प्ले में नहीं हैं। Top और Left मूल्यों का भी उपयोग किया जा सकता है एक FindMatchingControls करना और नकारात्मक Top या Left काम के साथ कुछ भी अनदेखा करने के लिए परिणामों को स्क्रीनिंग करना

जब DrawHighlight विधि का परीक्षण करना उपयोगी होता है, तो यह एक नियंत्रण के आस-पास एक आयताकार खींचती है। क्रॉस-हेयर टूल के साथ अभिलेखों को रिकॉर्ड करते समय एक ही प्रकार का आयत खींचा जाता है।

कोडित यूआई सामग्री सूचकांक में बहुत अच्छी जानकारी है "नियंत्रण के लिए यूआई टेस्ट फ्रेमवर्क कैसे खोज (खोज) करता है" का लिंक आपके लिए विशेष रूप से सहायक हो सकता है





coded-ui-tests