Reputation: 7769
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
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
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