I need to find the xpath of the help button for my automation tests.
Here is the HTML element:
<button data-component-id="nokia-react-components-iconbutton" tabindex="0" mode="dark" type="button" xpath="1"></button>
<svg viewBox="0 0 24 24" xpath="1">
</svg>
I tried with this XPath, but it didn't work:
//*[@data-component-id="nokia-react-components-iconbutton"]//svg[contains(@class,"HelpOutline")]
CodePudding user response:
If you want to select the <button> element before the <svg>, try the following XPath:
//*[@data-component-id="nokia-react-components-iconbutton" and following-sibling::svg[1][contains(@class,"HelpOutline")]]
CodePudding user response:
Try this XPath to locate button:
'//*[name()="svg" and contains(@class,"HelpOutline")]/preceding-sibling::button'
Note that svg tag is not a part of standard HTML-namespace, so //svg won't work. You need to use //*[name()="svg"] instead
CodePudding user response:
The <button> element itself should be clickable and both the locator strategies should work:
-
button[class*='HelpButton'][data-component-id='nokia-react-components-iconbutton'] -
//button[@data-component-id='nokia-react-components-iconbutton' and contains(@class, 'HelpButton')]
However, as the element is a React element so to click on the element you need to induce WebDriverWait for the element to be clickable and you can use either of the following locator strategies:
Using Java and xpath:
new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@data-component-id='nokia-react-components-iconbutton' and contains(@class, 'HelpButton')]"))).click();Using Python and css_selector:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='HelpButton'][data-component-id='nokia-react-components-iconbutton']"))).click()Note: For Python clients you have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
