2011-03-26 15 views
6
selenium.click("gwt-uid-204"); // this is recorded from Selenium IDE 

में बदल रहा है मैं अपने (gwt) जावा एप्लिकेशन में चेक बॉक्स पर क्लिक कर रहा हूं। Gwt-uid कभी भी बदल रहा है, इसलिए यदि आईडी बदल गई तो मेरा तत्व मेरे ऐप्स में नहीं मिला है। नियमित अभिव्यक्ति मेरे लिए काम नहीं कर रही है और मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। आपकी मदद केजीडब्ल्यूटी आईडी तत्व हर समय सेलेनियम

selenium.click("gwt-uid-[0-9]); 

मैं सेलेनियम 1.0.3 का उपयोग कर रहा है, जावा

उत्तर

0

के लिए धन्यवाद दो संभव समाधान कर रहे हैं। सबसे पहले से कहना है कि आप रेगेक्स कहकर रेगेक्स का उपयोग कर रहे हैं: gwt-uid- [0-9]। जैसा कि आपके पास है, यह उस तत्व और तत्व को देख रहा है जिसका नाम या आईडी वह शाब्दिक स्ट्रिंग है।

दूसरा समाधान उन चीज़ों के लिए स्थिर आईडी चालू करना है जिन पर मैं http://element34.ca/blog/google-web-toolkit-and-id पर चर्चा करता हूं।

-adam

15

कई GWT तत्वों आप स्पष्ट रूप से परीक्षण और डिबगिंग प्रयोजन के लिए तत्वों के लिए आईडी स्थापित करने के लिए अनुमति देने के लिए ensureDebugId (UIObject पर विधि) के साथ आता है। आपको मॉड्यूल

<inherits name="com.google.gwt.user.Debug"/> 

यह काम करने के लिए भी आवश्यक है। इसका लाभ यह है कि आप प्रोड मोड संकलन के दौरान विरासत मॉड्यूल को हटाकर उत्पादन परिनियोजन से ट्रेस को हटा सकते हैं। इसलिए अनावश्यक आईडी को हटाने के लिए कोड परिवर्तन नहीं होंगे।

0

मान लें कि आपके पास प्रस्तुत किए गए गतिशील आईडी हैं, पहले एहसास करें कि सेलेनियम की click विधि locator तर्क लेती है। एक सरल तरीका एक लोकेटर को निर्दिष्ट करना है जो आपके निरंतर "gwt-uid-" उपसर्ग से शुरू होने वाली आईडी पाता है। आप प्रौद्योगिकी के आपकी पसंद पर निर्भर करता है, अपने click विधि करने के लिए तर्क के रूप में इन लोकेटर के किसी भी उपयोग कर सकते हैं:

 
    == XPath == 
    //input[starts-with(@id, 'gwt-uid-')] 

    == CSS == 
    css=input[id^='gwt-uid-'] 

    == DOM == 
    dom=for each (e in document.getElementsByTagName('input')) if (e.id && (e.id.substr(0, 'gwt-uid-'.length) === 'gwt-uid-')) e 

फ़ुटनोट 1: मैं GWT उपयोग नहीं किया है, इसलिए मेरे ऊपर दिए गए उदाहरणों मान यह अभी भी एक डालता है <input> तत्व में चेक बॉक्स; आवश्यकतानुसार समायोजित करें।

फुटनोट 2: सेलेनियम नियमित अभिव्यक्ति सहायता प्रदान करते हैं, के रूप में एडम सूचित करता है, लेकिन इस मामले में उसके साथ दो मुद्दे हैं: के बजाय "regex:": (1) उपसर्ग "regexp" है। (2) सेलेनियम की click विधि regexp उपसर्ग का समर्थन करता है! (मेरे अनुभवजन्य सबूत बताते हैं कि लोकेटर सेलेनियम में रेगुलर एक्सप्रेशन का उपयोग नहीं करते, केवल पाठ मिलान तर्क करते हैं।)

+0

यदि सभी गतिशील आईडी 'gwt-uid-' से शुरू हो रही हैं, तो आप कैसे हल करेंगे? ज्यादातर ids gwt-uid-withsomenumber हैं जो सत्रों में अलग है। – Swagatika

+0

मेरे सभी 3 उदाहरण बिल्कुल ठीक हैं, इसलिए मुझे यकीन नहीं है कि आप और क्या पूछ रहे हैं। (हालांकि तकनीकी रूप से मुझे उपसर्ग का पालन करने के लिए एक संख्या की आवश्यकता नहीं है, लेकिन इससे उसमें झूठे सकारात्मक मिलान होने की संभावना नहीं है।) –

5

आप 3/4 तरीके में कर सकते हैं इस लिंक की जाँच कर सकते हैं: 3 ways of dealing with GWT dynamic element Ids जिसके बारे में 3 अलग अलग तरीकों में बात करती है अपने जीडब्ल्यूटी तत्वों को एक स्थिर आईडी निर्दिष्ट करने के लिए।

इसके अलावा, आप एक कस्टम जावास्क्रिप्ट विधि लिख सकते हैं जो सभी आईडी को गतिशील रूप से लाएगा। फिर आप सेलेनियम कार्यों के लिए उन आईडी को संसाधित कर सकते हैं।

0

आप जीडब्ल्यूटी यूआईडी को हटाने के लिए फायरबग एड ऑन का भी उपयोग कर सकते हैं।

  • राइट क्लिक करें जहां GWT यूआईडी है और " फ़ायरबग साथ तत्व का निरीक्षण" -
  • कोड पर
  • क्लिक करें जहां GWT यूआईडी और फ़ायरबग खिड़कियों प्रकट होता है जब चुनें "नष्ट कर दिया विशेषताओं आईडी"
  • आईडी को हटाने के बाद, एक और बार राइट क्लिक करें और "एक्सपैथ"
  • कॉपी करें अतिरिक्त (/) जोड़ें और लक्ष्य पर xpath पेस्ट करें।

This भी मदद कर सकता है।

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