2011-11-04 17 views
12

तत्व "अगला" तत्व ढूंढें मैं सेलेनियम का उपयोग करके अपने प्रोजेक्ट में वेब परीक्षण जोड़ रहा हूं। मेरे पास पहले से ही परीक्षण का एक गुच्छा है जोसेलेनियम: अन्य तत्व

final WebElement dateElement = web.findElement(By.id(elementId)); 

और यह ठीक काम करता है। अब मेरे पास एक और आवश्यकता है। यह मेरे जेनरेट पेज में है:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd"> 
<span class="error">dateElement is an invalid date</span> 

मैं त्रुटि संदेश कैसे प्राप्त कर सकता हूं? मुझे ऐसा कुछ चाहिए जो मुझे कक्षा "त्रुटि" के साथ अवधि तत्व का अनुरोध करने की अनुमति देता है जो कि तिथि के बाद ही है।

(यह त्रुटि संदेश स्प्रिंग एमवीसी द्वारा घिरा हुआ था, इसलिए इसे सीधे बदलना आसान नहीं है। संभावित मुझे लगता है, लेकिन मैं नहीं चाहूंगा)।

कोई वैकल्पिक विचार स्वागत है।

उत्तर

19

ठीक है, मुझे पहले से ही एक्सपैथ और निम्नलिखित-भाई का उपयोग करके समाधान मिला है, यह बहुत जटिल नहीं था।

final WebElement errorElement = web.findElement(By.xpath("//*[@id='" + elementId + "']/following-sibling::span[@class='error']")); 

यह मैं देता मैं चाहता था, और एक NoSuchElementException फेंकता है जब यह यहाँ नहीं है, जो है मैं वास्तव में क्या चाहते हैं।

+0

महान, मैं इस सवाल का जवाब भी – CosminO

+0

यह भी का उपयोग कर 'सरल किया जा सकता की जरूरत अंतिम WebElement errorElement = dateElement.findElement (By.xpath (" निम्न-भाई :: अवधि [@ class = 'त्रुटि'] ")); 'यदि आपके पास वास्तविक' WebElement dateElement' उपलब्ध है। आपको उस तत्व को खोज की जड़ के रूप में उपयोग करना होगा, लेकिन ध्यान दें कि xpath अभिव्यक्ति उस मामले में '//' (या '/') से शुरू नहीं होनी चाहिए, अन्यथा यह दस्तावेज़ रूट से वैसे भी खोजेगी। – neXus

5
elementSelector = "input + span[class='error']"; 

final WebElement dateElement = web.findElement(By.cssSelector(elementSelector)); 
+0

'dateElement' के बजाय' errorElement' क्यों नहीं? और क्या होगा यदि यह तिथि के साथ असंबंधित त्रुटि है? – tishma

+1

@tishma क्योंकि ओपी के लिए यही था – CBRRacer

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