2016-08-04 70 views
0

我正在使用Selenium WebDriver和Java。Web元素不能被包含Selenium WebDriver的文本的Xpath識別Java

下面是我的html代碼:

<div id="servicetype-pp" class="z-combobox-popup " style="display: none; width: auto;"> 
    <ul id="servicetype-cave" class="z-combobox-content"> 
     <li id="zk_comp_140" class="z-comboitem"> 
     <li id="zk_comp_141" class="z-comboitem"> 
      <span class="z-comboitem-image"></span> 
      <span class="z-comboitem-text">Bill Generation Service</span> 
     </li> 
     <li id="zk_comp_142" class="z-comboitem"> 
     <li id="zk_comp_143" class="z-comboitem"> 
     <li id="zk_comp_144" class="z-comboitem"> 
     <li id="zk_comp_145" class="z-comboitem"> 
     <li id="zk_comp_146" class="z-comboitem"> 
     <li id="zk_comp_147" class="z-comboitem"> 
     <li id="zk_comp_148" class="z-comboitem"> 
     <li id="zk_comp_149" class="z-comboitem"> 
     <li id="zk_comp_150" class="z-comboitem"> 
    </ul> 
</div> 

我已經定義與XPath包含特定文本WebElement。

//div[@id='servicetype-pp']//span[contains(text(),'Bill Generation Service')] 

它不工作。但是,當我用一個字搜索時,沒有任何空間,它工作正常。

//div[@id='servicetype-pp']//span[contains(text(),'Bill')] or 
//div[@id='servicetype-pp']//span[contains(text(),'Generation')] or 
//div[@id='servicetype-pp']//span[contains(text(),'Service')] 

看來這是空間問題。

請幫忙。

TIA。

+0

你能嘗試使用剛剛全文,而不是包含API,例如搜索: - driver.findElement(By.xpath( 「// * [text()='Bill Generation Service']」)); –

+0

@AnupamSaini:試過了。沒有工作。 :( –

+0

@BhargavRaval你是什麼意思沒有工作..是否有任何例外?? –

回答

2

您可以嘗試使用normalize-space()

//div[@id='servicetype-pp']//span[contains(text()[normalize-space()], 'Bill Generation Service')] 
+0

試過了。沒有工作。:( –

+0

@BhargavRaval你也可以試試'// div [@ id ='servicetype-pp'] // span [normalize-space(。)='Bill Generation Service'] ' – Guy

+0

和'// div [@ id ='servicetype-pp'] // span [text()[n ormalize-space(。)] ='Bill Generation Service']' – Guy

0

其實你<div id="servicetype-pp" class="z-combobox-popup " style="display: none; width: auto;">看起來無形的,這就是爲什麼你不能夠與要素互動,嘗試如下: -

WebElement el = driver.findElement(By.id("servicetype-pp")); 
el = (WebElement)((JavascriptExecutor)driver).executeScript("arguments[0].style.display = 'block';return arguments[0]", el); 

//Now you can find your desire element 
WebElement spanElement = el.findElement(".//span[contains(text(),'Bill Generation Service')]"); 

//Now do your further steps with this element 

編輯: - 如果您獲得NuSuchElementExcpetion,這意味着可見度不是問題,該元素可能位於frameiframe。如果是,你需要切換該frameiframe尋找元素,如下之前:

driver.switchTo().frame("frame name or id"); 

// Now go to find element 
WebElement spanElement = driver.findElement(".//span[contains(text(),'Bill Generation Service')]"); 
+0

我不認爲風格是這裏的問題。我有其他沒有'style = display:none'的元素。對他們來說,我也面臨同樣的問題。 –

+0

@BhargavRaval好的,你找幀或iframe?確保這個元素不在任何框架或iframe裏面... –

+0

如果你得到nosuchelement可能是這是在任何幀...檢查它並讓我知道.. –

相關問題