Himanshu Poddar
Himanshu Poddar

Reputation: 7769

Selenium : Get a div that contains a specific div class inside it

I have a page structure which contains a classname assigned to multiple divs. But there is one specific div that will contain a specific div.class inside it which happens dynamically.

<div class="ProductVariants__VariantCard-sc-1unev4j-3 bEuNss">
   <div class="ProductVariants__RadioButtonContainer-sc-1unev4j-4 jqJIBg">
     <div class="ProductVariants__RadioButtonOuter-sc-1unev4j-5 jcgpFW">
       <div class="ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM">
       </div>
     </div>
   </div>
   <div class="ProductVariants__VariantDetailsContainer-sc-1unev4j-7 fvkqJd">
     <p class="ProductVariants__VariantUnitText-sc-1unev4j-8 bZvIga">50 g</p>
     <div class="ProductVariants__PriceContainer-sc-1unev4j-9 jjiIua">
       ₹111 
       <span class="ProductVariants__MRPText-sc-1unev4j-10 jEinXG">
         ₹345
       </span>
     </div>
   </div>
</div>

If you see here this class ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM Line number 4 will be contained within one that specific class. Though there could be multiple of ProductVariants__VariantCard-sc-1unev4j-3 bEuNss.

How do I get the class ProductVariants__VariantCard-sc-1unev4j-3 bEuNss which contains ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM inside it.

This is what I have tried

driver.find_element(by=By.XPATH, value="//div[contains(@class,'ProductVariants__VariantCard-sc-1unev4j-3 bEuNss')]//div[contains(@class, 'ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM')]")

But this instead gives me the inner div and not the whole outer div

'<div class="ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM"></div>'

Upvotes: 1

Views: 1640

Answers (2)

undetected Selenium
undetected Selenium

Reputation: 193058

To identify the <div> with class="ProductVariants__VariantCard-sc-1unev4j-3 bEuNss with respect to the <div> with class="ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM you can use the following Locator Strategy:

driver.find_element(by=By.XPATH, value="//div[starts-with(@class, 'ProductVariants__RadioButtonInner')]//ancestor::div[starts-with(@class, 'ProductVariants__VariantCard')]")

Upvotes: 2

JaSON
JaSON

Reputation: 4869

If you want to select ancestor node that contain specific descendant node try

driver.find_element(by=By.XPATH, value="//div[contains(@class,'ProductVariants__VariantCard-sc-1unev4j-3 bEuNss') and .//div[contains(@class, 'ProductVariants__RadioButtonInner-sc-1unev4j-6 fgFqYM')]]")

Upvotes: 0

Related Questions