2011-02-25 18 views
5

पर एक बच्चे नोड का चयन करें मैं सेलेनियम आईडीई का उपयोग करके कुछ वेब ऐप परीक्षण कर रहा हूं, और हमारे परीक्षणों को फैलाने के लिए कुछ यादृच्छिकता पेश करना चाहता हूं। मैं वर्तमान में सेलेनियम के storeAttributeValue का उपयोग कर रहा हूं, जहां आप इसे XPath अभिव्यक्ति देते हैं, और यह पहले तत्व को संग्रहीत करता है जो इसे मेल करता है (sorta)। हालांकि मैं पहले मैच को स्टोर नहीं करना चाहता, मैं इसे बेतरतीब ढंग से एक बच्चे नोड का चयन करना चाहता हूं।XPath यादृच्छिक

उदा।

//table[@id='mytable']//tr इस तालिका के सभी tr बच्चे का चयन करता है। //table[@id='mytable']//tr[0] पहले टीआर (अब नेस्ट टेबल कल्पना करते हुए) //table[@id='mytable']//tr[3] तीसरे टीआर का चयन करता है, आदि का चयन करता है

वहाँ किसी तरह (पूरी तरह xpath में) मैं कह सकता हूँ "मुझे एक यादृच्छिक टीआर दें" है, यानी //table[@id='mytable']//tr[SOMETHINGHERE] जो हर मैं 'evalulate'/'run' यह //table[@id='mytable']//tr के सेट में एक ट्र नोड 'वापसी' करेगा।

+0

'// तालिका [@ id = 'mytable'] // tr [0] 'कुछ भी नहीं चुनता क्योंकि' [0] 'को' [position() = 0] 'तक बढ़ाया जाएगा। –

+0

@Alejandro ओह! सही किया। शुक्रवार दोपहर नींद को दोष दें – Rory

+0

"यादृच्छिक" से आपका क्या मतलब है? ध्यान दें कि हम एक घोषणात्मक माहौल में हैं ... –

उत्तर

4

यदि XPath अभिव्यक्ति एक आमंत्रण से दूसरे में परिवर्तित नहीं होने जा रही है, और इनपुट स्रोत भी वही होगा, तो आपको पैरामीटरकरण द्वारा भिन्नता प्रदान करने की आवश्यकता होगी, अन्यथा उसी कार्य के साथ एक ही इनपुट हमेशा एक ही परिणाम (आउटपुट करेगा, इसलिए मैंने घोषणात्मक प्रतिमान पर टिप्पणी की है)।

कुछ की तरह:

/table[@id='mytable']/tbody/tr[$pseudoRandom mod count(../tr) + 1] 

अगर कोई इनपुट स्रोत प्रति एक मूल्यांकन होने जा रहा है, XPath में सबसे सरल छद्म अनियमितता

/table[@id='mytable']/tbody/tr[count(//node()|//@*) mod count(../tr) + 1] 

दूसरे शब्दों में, कुछ छद्म अनियमितता बनाने होगा बीज के रूप में पूरे इनपुट स्रोत की कुछ संपत्ति के साथ गणना।

0

निर्माण गतिशील XPath अभिव्यक्ति और फिर इसे का मूल्यांकन:

/table[@id='mytable']/tbody/tr[position() = {yourRandom}] 

जहां

{yourRandom}

एक यादृच्छिक संख्या प्राप्त साथ XPath अभिव्यक्ति की "कंकाल" में प्रतिस्थापित किया जाना चाहिए पीएल होस्टिंग XPath में।

उदाहरण के लिए सी # में कोई XPath अभिव्यक्ति बनाने के लिए string.Format() विधि का उपयोग करेगा।

आप XSLT का उपयोग कर रहे हैं, तो कोड है कि परिवर्तन एक बाहरी पैरामीटर के रूप में एक XML टुकड़ा में एन्कोड यादृच्छिक संख्या का एक अनुक्रम उपलब्ध करा सकता है invokes। फिर एक्सएसएलटी कोड प्रत्येक XPath अभिव्यक्ति के लिए प्रत्येक यादृच्छिक संख्या का उपयोग करेगा।

2

आप बैश कमांडलाइन का उपयोग कर रहे हैं, तो आप इस तरह के तरह $ यादृच्छिक चर से एक कूट-यादृच्छिक संख्या प्राप्त कर सकते हैं:

/table[@id='mytable']/tbody/tr[floor('"${RANDOM}"' mod count(../tr)+1)] 

यही एक रास्ता है मैं जबकि xmllint उपयोग करने का प्रयास करने के लिए एक यादृच्छिक संख्या मिल सकता था और एक यादृच्छिक बाल नोड प्राप्त करें। Xmllint और कुछ FILENAME का उपयोग करके आदेश यहां दिया गया है।xml:

xmllint --format --recover --xpath '/table[@id='mytable']/tbody/tr[floor('"${RANDOM}"' mod count(../tr)+1)]' FILENAME.xml