You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Selenium在第三方网站Highcharts图表中主动触发tooltip显示

解决方案:触发Highcharts动态生成tooltip

核心原理

之前触发失败的核心原因是Highcharts的tooltip触发逻辑不依赖容器的通用mouseover事件,也不通过hover类控制显示,而是绑定在内部SVG的**数据元素(折线点、柱状图柱体等)**上,需要接收带真实坐标参数的pointerover、mousemove组合事件才会触发内部渲染逻辑,动态把.highcharts-tooltip插入到body中。

可直接运行的JavaScript代码

// 第一步:获取Highcharts容器,替换下面的选择器为你实际的图表容器选择器
const chartContainer = document.querySelector('.highcharts-container');
// 第二步:获取图表内的第一个可交互数据点,你也可以按索引指定你需要悬停的点
const targetPoint = chartContainer.querySelectorAll('.highcharts-point, .highcharts-tracker')[0];

// 计算元素坐标,用于事件参数
const rect = targetPoint.getBoundingClientRect();
const clientX = rect.left + rect.width / 2;
const clientY = rect.top + rect.height / 2;

// 依次触发pointerover、mousemove事件,带真实坐标参数
['pointerover', 'mousemove'].forEach(eventName => {
  const event = new MouseEvent(eventName, {
    clientX: clientX,
    clientY: clientY,
    bubbles: true,
    cancelable: true,
    view: window
  });
  targetPoint.dispatchEvent(event);
});

运行上述代码后,.highcharts-tooltip元素会自动插入到body中,可直接选中。

Java Selenium适配方案

直接通过JavascriptExecutor执行上面的JS代码即可,示例代码如下:

// 导入必要包
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;

// 你的WebDriver实例
WebDriver driver = ...;

// 执行JS触发tooltip显示
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("const chartContainer = document.querySelector('.highcharts-container');const targetPoint = chartContainer.querySelectorAll('.highcharts-point, .highcharts-tracker')[0];const rect = targetPoint.getBoundingClientRect();const clientX = rect.left + rect.width / 2;const clientY = rect.top + rect.height / 2;['pointerover', 'mousemove'].forEach(eventName => {const event = new MouseEvent(eventName, {clientX: clientX,clientY: clientY,bubbles: true,cancelable: true,view: window});targetPoint.dispatchEvent(event);});");

// 之后添加显式等待,等tooltip元素出现即可操作

适配调试说明

  • 如果数据点选择器不匹配,可打开浏览器F12元素面板,悬停到你要触发的图表数据位置,查看选中的元素类名,替换querySelectorAll内的选择器即可
  • 如果需要指定某一个具体数据点,修改[0]的索引即可,比如第二个点写[1]

内容的提问来源于stack exchange,提问作者Feedbacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:06:06