2012-09-24 20 views
5

के साथ मिलान तत्व आईडी का मिलान मैं जेएसएफ 1.2 का उपयोग कर रहा हूं। हम कुछ सेलेनियम परीक्षण (xpath पर आधारित) लिखना चाहते हैं, लेकिन xpath में तत्व आईडी के वाइल्डकार्ड मिलान नहीं लगते हैं।जेएसएफ डायनामिक व्यू आईडी

हम उपसर्ग आईडी को बंद नहीं कर सकते हैं क्योंकि हम आईबीएम पोर्टल सर्वर 6.1 के भीतर एक पोर्टल के रूप में चल रहे हैं और हमारे पर्यावरण को उस वातावरण में उपसर्ग बंद कर दिया गया है।

रूप

//*[substring(@id, 54)='id_distributorName']

की xpaths वर्तमान में हम प्रयोग कर रहे हैं जो मिलान हो जाएगा: <select size="1" class="firstName" name="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" id="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" >

लेकिन यह मुझे हमलों कि यह सोचते हैं JSF हमेशा एक ही लंबाई के एक viewId उत्पन्न होगा खतरनाक है।

क्या ऐसा करने का कोई बेहतर तरीका है?

हम अपने इनपुट नियंत्रण के लिए लेकिन निश्चित रूप JSF की name विशेषता का उपयोग कर की कोशिश की है विशेषता पर ध्यान नहीं देता है और यह स्वयं के नाम विशेषता जिसका मूल्य EVANT निपटने पटकथा कारणों के लिए शायद आईडी से मेल खाता है) है लिखते हैं

उत्तर

5

आप XPath 2.0 का उपयोग कर रहे हैं, तो बस ends-with() समारोह का उपयोग करें string-length()substring() की शुरुआत की गणना करने के लिए:

//*[substring(@id, string-length(@id) - 18) = ':id_distributorName'] 

यहां, 18 id_distributorName की लंबाई है (: उपसर्ग के बिना!)।

4

ठीक है मैं सिर्फ है मेरे अपने प्रश्न का उत्तर दिया।

मैं मानता हूं कि मुझे xpaths के बारे में बहुत कुछ पता है, यह मेरा बहाना है!

//*[ends-with(@id, ':id_distributorName')] 

आप XPath 1.0 उपयोग कर रहे हैं, का उपयोग करें:

जवाब का उपयोग करने के

यानी //*[contains(@id, 'id_distributorName')]

+1

यह भी' foo की तरह आईडी से मेल खाती जाएगा। – BalusC

0

उपयोग: id_distributorName: bar` और `myid_distributorNames`, वास्तव में मजबूत नहीं

//*[substring-after(@id, ':commonEntryForm:') = 'id_distributorName'] 
संबंधित मुद्दे