简体   繁体   中英

How to write XPath for the text present outside the tags?

<div class="accordion_browse">
  <a target="_blank" href="https://www.silverpages.sg/tools/e-care-locator" 
   aria-expanded="false" aria-controls="collapseExample">
    <span class="browse_img">
        <img src="/sites/assets/assets/directory/icons/eldercare.png"/>
    </span>
    Eldercare Services
    <i class="indicator fa fa-chevron-right pull-right" aria-hidden="true"/>
  </a>
</div>

Note: the text required is 'Eldercare Services'

Code:

string Eldercare = driver.FindElement(By.XPath("//a[contains(.,'Eldercare Services')")).Text; 
Console.WriteLine(Eldercare + " found");
Assert.IsTrue(Eldercare.Contains("Elder"), Eldercare + " not found"); 

A text node is retrieved using the text node text()

XPath: "/body/div/text()"

That will retrieve all children text nodes of /body/div .

"/body/div/text()[1]" will retrieve the first text node inside /body/div

Additional Reading on XPath: https://www.w3schools.com/xml/xpath_examples.asp

The given xpath is looking good, but By.XPath("//a[contains(.,'Eldercare Services')") example code missing a closing square bracket: By.XPath("//a[contains(.,'Eldercare Services')]")

With this fix, the xpath will give the a element

 <a target="_blank" href="https://www.silverpages.sg/tools/e:care:locator" aria:expanded="false" aria:controls="collapseExample"> <span class="browse_img"> <img src="/sites/assets/assets/directory/icons/eldercare.png"/> </span> Eldercare Services longtext <i class="indicator fa fa:chevron:right pull:right" aria:hidden="true"/> </a> 

The missing bracket should fix the code.

If Selenium would have work with text elements it could be

//a[contains(.,'Eldercare Services')]/text()

results would be a string array with 3 strings. the middle one has the expected string, because before the span and after i elements there will probably be two empty strings.

Text = 

Text = 
    Eldercare Services longtext

Text = 

If use a second filter for the text, it would result the expected string only

//a[contains(.,'Eldercare Services')]/text()[contains(.,'Elder')]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM