2009-03-16 11 views
35

मेरे पास GWT एप्लिकेशन है जिसके लिए मैं Selenium का उपयोग करके कुछ परीक्षण लिखने की कोशिश कर रहा हूं।मैं XPath का उपयोग करके केवल दृश्य तत्वों का चयन कैसे करूं?

मैं परीक्षण के लिए पृष्ठ पर तत्वों की पहचान करने के लिए XPath का उपयोग कर रहा हूं। id का उपयोग id मानों के रूप में काम नहीं करेगा जीडब्ल्यूटी द्वारा ऑटो-जेनरेट किया गया है और बदल सकता है। चीजें अच्छी तरह से जा रहा शुरू कर दिया जब मुझे एहसास हुआ कि इस प्रकार मैं उनके लेबल करके बटन मिल सकता है:

//button[.='OK'] 

हालांकि, जब मैं कई परीक्षण मैं समस्या शुरू होने पर चल रहा शुरू कर दिया। मुझे एहसास हुआ कि यह मुद्दा जावास्क्रिप्ट द्वारा जेनरेट किए गए जीडब्ल्यूटी ऐप के सभी अलग-अलग "पेज" थे, जो HTML में छिपे हुए <div> तत्वों में रहते हैं। इसका मतलब है कि मेरे सेलेनियम परीक्षण कभी-कभी वर्तमान दृश्य में दिखाई देने वाले बटन के बजाय छिपा बटन क्लिक कर रहे थे।

Firebug के साथ HTML की जांच करना, ऐसा लगता है कि GWT खाल उनके style विशेषता को display: none जोड़कर <div> तत्वों। इसका मतलब यह है इस प्रकार के रूप में मैं सब छिपा ठीक बटन पा सकते हैं:

//div[contains(@style,'display: none')]//button[.='OK'] 

यह सब छिपा ठीक बटन, बटन जो एक पूर्वज <div> जो style में display: none होने से छिपा हुआ है है यानी मिल जाएगा।

मेरा प्रश्न है: मैं केवल ओके बटन को खोजने के लिए XPath का उपयोग कैसे करूं? style में display: none वाले तत्वों को कोई पूर्वजों <div> तत्वों को मैं कैसे ढूंढूं?

उत्तर

46

यह काम करना चाहिए:

.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')]) 
and not(ancestor::div[contains(@style,'display: none')])] 

संपादित करें:

सरल और अधिक कुशल अभिव्यक्ति नीचे:

//div[not(contains(@style,'display:none'))]//button[.='OK'] 

ठीक से काम नहीं करता है, क्योंकि हर बटन कम से कम एक div पर दिखाई देती है है अपने पूर्वजों में।

+0

यह है कि मिल जाएगा। बहुत धन्यवाद। –

+1

पिछला कोई काम नहीं करता है यदि डोम-पेड़ में कोई अन्य div है जो छिपी नहीं है:

Fortega

+0

@ फोर्टेगा और यह इसके आसपास के पाठ में कहा जाता है –

12

सेलेनियम 2 वेबड्राइवर हमें इस समस्या से निपटने वाली डिस्प्लेड() विधि का विकल्प देता है। सेलेनियम योगदानकर्ताओं द्वारा अच्छा काम।

+1

क्या यह काम करता है यदि डिस्प्ले छुपा विशेषता अभिभावक तत्व पर है और तत्व स्वयं नहीं है? –

+2

हां, लेकिन आपको इसे विशेष तत्व के लिए जांचना है, पूरे संग्रह से मेल नहीं खा सकता है। – sitnarf

+1

सावधान रहें क्योंकि यह 'StaleElementReferenceException' अपवादों को बढ़ा सकता है जब तत्वों को पुनर्प्राप्त करने के बीच बदल दिया जाता है ('* द्वारा ढूंढें) और' isDisplayed() 'का उपयोग करके इसकी दृश्यता की जांच कर रहा है। – Blaise

-3
//div[contains(@style,'display: block')] 

यह कोड दिखाई तत्व xpath

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