2016-08-04 21 views
0

Ich verwende Selenium WebDriver mit Java.Web Element wird nicht von Xpath identifiziert, das einen Text für Selenium WebDriver enthält Java

Unten ist mein HTML-Code:

<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> 

ich einen WebElement von XPath definiert haben einen bestimmten Text enthalten.

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

Es funktioniert nicht. Aber wenn ich mit einem einzigen Wort ohne Leerzeichen suche, funktioniert es gut.

//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')] 

Es scheint, dass es ein Problem mit dem Raum ist.

Bitte helfen.

TIA.

+0

können Sie versuchen, die Suche nicht nur den vollständigen Text mit als api enthält, zum Beispiel: - driver.findElement (By.xpath ("// * [text() = 'Rechnungsgenerierungsdienst']")); –

+0

@AnupamSaini: Versuchte es. Hat nicht funktioniert. :( –

+0

@BhargavRaval was meinst du nicht funktioniert..Es gibt keine Ausnahme? –

Antwort

2

Sie können versuchen, normalize-space()

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

Versucht es. Hat nicht funktioniert. :( –

+0

@BhargavRaval können Sie auch versuchen, '// div [@ id = 'servicetype-pp'] // span [normalize-space (.) = 'Bill-Generierung Service'] ' – Guy

+0

und' // div [@ id = 'Servicetyp-pp'] // span [Text() [n ormalize-space (.)] = 'Bill Generation Service'] ' – Guy

0

eigentlich mit Ihrem <div id="servicetype-pp" class="z-combobox-popup " style="display: none; width: auto;"> sieht aus, als unsichtbar, das ist, warum Sie nicht in der Lage sind mit dem Element zu interagieren, versuchen Sie wie folgt: -

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 

Editiert: - Wenn Sie NuSuchElementExcpetion erhalten, bedeutet das, dass Sichtbarkeit nicht das Problem ist. Möglicherweise ist dieses Element in einem frame oder iframe. Wenn ja, müssen Sie die frame oder iframe wechseln, bevor Element zu finden, wie unten:

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

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

Ich glaube nicht, dass Stil das Problem ist. Ich habe andere Elemente ohne 'style = display: none'. Für sie steht ich auch vor dem gleichen Problem. –

+0

@BhargavRaval ok hast du nach frame oder iframe gesucht ?? Stellen Sie sicher, dass dieses Element nicht in einem Rahmen oder Iframe ist ... –

+0

Wenn Sie bekommen nosuchement kann dies in jedem Rahmen sein ... überprüfen Sie es und lassen Sie es mich wissen .. –