Kalyani Kachhi
Kalyani Kachhi

Reputation: 23

Getting value from tooltip when hover on svg element on the graph created with highcharts

I want to get text/value from the tooltip which appears when hover on svg element on the graph created with highcharts. Below is the snippet:

Highchart graph snippet

Tried below code:

List<WebElement> Volumelist=driver.findElements(By.xpath("//*[name()='svg']//*[name()='g'][5]//*[name()='g'][2]//*[name()='path']"));
System.out.println("Got the list!");        
new Actions(driver).moveToElement(Volumelist.get(1)).clickAndHold().build().perform();
WebElement toolTip=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='highcharts-halo highcharts-color-3'][@visibility='visible']")));  
System.out.println("toolTip text= "+toolTip.getText());

Upvotes: 2

Views: 3214

Answers (3)

Kalyani Kachhi
Kalyani Kachhi

Reputation: 23

So, solution that worked for me:

WebElement elem = driver.findElement(By.xpath("//[name()='svg']//[name()='g'][5]//[name()='g'][2]//[name()='path'][1]"));
new Actions(driver).moveToElement(elem).clickAndHold().moveByOffset(1, 1).pause(1000).perform();
String text=driver.findElement(By.xpath("//[name()='svg']//[name()='g'][9]//[name()='text'][1]//[name()='tspan'][3]")).getText();

Upvotes: 0

dangi13
dangi13

Reputation: 1275

First hover on the element on which tooltip appears and then execute :

String tooltipText = driver.findElement(By.cssSelector("g.highcharts-tooltip text tspan")).getAttribute("textContent");

You can ping me at [email protected] if that does not work for you.

Try to hover to tooltip element using this method if normal Actions hover is not working :

 public static void mouseHoverJScript(WebDriver driver, WebElement element) {
        String mouseOverScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false);"
                + " arguments[0].dispatchEvent(evObj);} else if(document.createEventObject) { arguments[0].fireEvent('onmouseover');}";
        ((JavascriptExecutor) driver).executeScript(mouseOverScript,
                element);

Upvotes: 1

j.barrio
j.barrio

Reputation: 1036

I found over their examples page the values with this XPath:

driver.findElement(By.xpath(.//*[name()="g" and contains(@class,"highcharts-label")]//*[name()="tspan" and @style='font-weight:bold'])).getText();

The first step is move the mouse over one point, for example with this XPath, move to the first point:

WebElement elem = DriverUtils.driver.findElement(By.xpath(.//*[name()='path' and contains(@class, 'highcharts-point highcharts-color')][1]));
new Actions(driver).moveToElement(elem).clickAndHold().build().perform();

I used the Selenium 3.9.0, with previous 3.4.0 version doesn't work for me.

Upvotes: 0

Related Questions