0

I have an svg object, using Selenium webdriver, I need to click as a button and go to previous page. Using xpath I am unable to do so. Below is the html code for svg but I am unable to fetch the xpath for the same. Any help is highly appreciated.

HTML Code:

<div class="title-holder">
   <h4>Home Dashboard</h4>
   <div class="time">3:48pm ET</div>
   <button class="update-button" type="button" data-testid="header-update-link" title="Refresh">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
      <path fill="currentColor" d="M20 12l-2.5 3-.18-.22-.71-.84L15 12h2a5.007 5.007 0 0 0-8.49- 
      3.59l-.63-.76A5.9083 5.9083 0 0 1 12 6c3.3137 0 6 2.6863 6 6h2zm-4.51 3.59A5.007 5.007 0 0 1 7 
      12h2l-1.61-1.93v-.01l-.71-.84L6.5 9 4 12h2c0 3.3137 2.6863 6 6 6a5.9083 5.9083 0 0 0 4.12- 
      1.65l-.63-.76z"></path>
    </svg>
   </button>
</div>
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • Tried using Actions class as below. It passes the test but does not execute the click operation. WebElement svgObject = webDriver.findElement(By.xpath("//*[name()='svg']")); Actions builder = new Actions(webDriver); builder.click(svgObject).build().perform(); – Hrishikesh Laturkar Sep 02 '20 at 22:42

2 Answers2

0

Xpath:

//*[@class='update-button']/*[name()='svg']

Try javascript to perform click action

WebElement ele = driver.findElement(By.xpath("//*[@class='update-button']/*[name()='svg']"));
((JavascriptExecutor) driver).executeScript("arguments[0].click();", ele);
Amruta
  • 1,128
  • 1
  • 9
  • 19
0

As per the HTML you have shared, you can safely avoid the <svg> element and click on the parent <button> element inducing WebDriverWait for the elementToBeClickable() and you can use either of the following Locator Strategies:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.update-button[data-testid='header-update-link'][title='Refresh']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='update-button' and @data-testid='header-update-link'][@title='Refresh']"))).click();
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352