2015-06-05 6 views
9

मैं अपने पूर्ण पथ (पूरे एलीमेंट) द्वारा तत्व ढूंढने की कोशिश कर रहा हूं और पहले उच्च स्तर तत्व ढूंढ रहा हूं और फिर उस तत्व (मॉड्यूलर एलिमेंट) के भीतर निम्न स्तर तत्व ढूंढ रहा हूं।ऐपियम findElement एक पंक्ति में दो बार उपयोग किया जाता है

WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath("//UIAStaticText[4]")); 
    WebElement wholeElement = appDriver.findElement(By.xpath("//UIATableCell[2]/UIAStaticText[4]")); 

    Logger.LogMessage("modularElement attribute1: " + modularElement.getLocation(), Priority.High); 
    Logger.LogMessage("wholeElement attribute1: " + wholeElement.getLocation(), Priority.High); 

वास्तव में अजीब मुद्दा मैं का सामना कर रहा है दो तत्वों (मॉड्यूलर और पूरे) विभिन्न तत्वों और न ही एक (ऊपर कोड में मुद्रित विभिन्न स्थानों से दिखाया गया है) कर रहे हैं: यहाँ मेरी कोड है। क्या कोई यह समझा सकता है कि यह मामला क्यों है?

धन्यवाद।

अद्यतन:

मैं भी का उपयोग कर .// की कोशिश की है, लेकिन है कि अभी भी प्रदान कर रहा है एक ही मुद्दा:

WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath(".//UIAStaticText[4]")); 

उत्तर

8

वे ही नहीं हैं।

appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath("//UIAStaticText[4]")); 

यहाँ, आप भी, कहीं भी //UIAStaticText[4] की तलाश कर रहे at any level in the entire DOM tree:

xpath का उपयोग करते समय ध्यान रखें कि webdriver मानक सम्मेलनों इस प्रकार हो: एक खोज के साथ उपसर्ग "//" पूरे दस्तावेज खोज करेंगे, इस वर्तमान नोड के बच्चे नहीं। अपनी खोज को पर इस वेबलेमेंट के बच्चों को सीमित करने के लिए ".//" का उपयोग करें।

//UIATableCell[2]/UIAStaticText[4] प्रत्यक्ष बच्चों को केवल //UIATableCell[2] की बीच खोज करेंगे है।

+1

आप यह सुनिश्चित करें कि कोड की पहली पंक्ति 'मिलेगा UIAStaticText' केवल तहत कर रहे हैं' UIATableCell [2] ', और दस्तावेज़ में कहीं और नहीं? बस पूछना, चूंकि '//' से शुरू होने वाला XPath सामान्य रूप से * दस्तावेज़ के रूट नोड के सभी वंशजों से चयन करता है। (मैं '/' और '//' के बीच के अंतर के बारे में आपके सामान्य विवरण से सहमत हूं।) – LarsH

+0

@LarsH यह एक महान बिंदु है! मुझे वह याद आया है। संपादित। बहुत धन्यवाद! – alecxe

+0

टिप्पणियों के लिए धन्यवाद। ./UIAStaticText[4 का उपयोग करने से डरते हैं] जिसके परिणामस्वरूप 'तत्व स्थित नहीं हो सका' त्रुटि होती है। उपरोक्त कोड की 2 लाइनों की प्रतिलिपि बनाई गई और चिपकाया गया और संपूर्ण एलिमेंट पाया जा रहा है लेकिन मॉड्यूलर एलिमेंट नहीं है। –

0

मैं बहुत बजाय जैसे कि यह करना होगा:

By locator = new ByChained(By.xpath("//UIATableCell[2]"),By.xpath(".//UIAStaticText[4]")); 
WebElement modularElement = appDriver.findElement(locator); 

या शायद यह:

public WebElement getCellTextElement(int cell, String varText) { 
    By locator = new ByChained(By.xpath("//UIATableCell[" + cell + "]"), 
     By.xpath(".//UIAStaticText[contains(text(),'" + varText + "')]")); 
    WebElement modularElement = appDriver.findElement(locator); 
    return modularElement; 
} 
संबंधित मुद्दे