codyc4321
codyc4321

Reputation: 9672

Get parent of Xpath with certain class searching by child span

I have here html like:

<div class="select-menu-item js-navigation-item">...</div>
<div class="select-menu-item js-navigation-item">...</div>
<div class="select-menu-item js-navigation-item">
    <svg ...></svg>

    <div class="select-menu-item-gravatar"></div>
    <div class="select-menu-item-text lh-condensed">
        <span class="select-menu-item-heading">
            the_username813
            <span class="description">Last name, First name</span>
        </span>
    </div>
</div>

I need to get the <div class="select-menu-item js-navigation-item"> that includes the child span with the_username813.

I tried a few things that failed, like:

ipdb> element = self.driver.find_element_by_xpath("//span[contains(., 'the_username813')]/parent::div[contains(c
oncat(' ', @class, ' '), ' js-navigation-item ')]")
*** NoSuchElementException: Message: Unable to locate element: //span[contains(., 'the_username813')]/parent::div[contains(concat(' ', @class, ' '), ' js-navigation-item ')]

How can I get this parent div element using Xpath?

Upvotes: 1

Views: 3173

Answers (1)

Andersson
Andersson

Reputation: 52665

Try below Xpath expression and let me know the result:

//div[@class="select-menu-item js-navigation-item" and .//span[normalize-space(text())="the_username813"]]

Also note that <div class="select-menu-item js-navigation-item"> is not a direct parent, but ancestor element, so you also might use

//span[normalize-space(text())="the_username813"]/ancestor::div[@class="select-menu-item js-navigation-item"]

Upvotes: 1

Related Questions