使用selenium webdriver测试Highcharts

使用selenium webdriver测试Highcharts

问题描述:

我想测试使用Python和Selenium Webdriver从一个JSON文件(我已经阅读过)中呈现数据的Highcharts图的准确性。使用selenium webdriver测试Highcharts

如何从网站上读取Highchart数据?

谢谢你, 叶夫根尼·

的highchart数据转换为SVG路径,所以你必须给自己解释的路径。我不确定为什么你会这样做,实际上:一般来说,你可以相信第三方库可以像广告一样工作;该代码的测试应该驻留在该库中。

如果你仍然想这样做,那么你必须潜入Javascript来检索数据。以Highcharts Demo为例,您可以提取第一行的数据点,如下所示。这会给你一个字符串SVG path definition,然后你可以解析它来确定原点和数据点。将此与垂直轴的大小进行比较,可以让您计算图表所暗示的值。

# Get the origin and datapoints of the first line 
s = selenium.get_eval("window.jQuery('svg g.highcharts-tracker path:eq(0)')") 
splitted = re.split('\s+L\s+', s) 
origin = splitted[0].split(' ')[1:] 
data = [p.split(' ') for p in splitted[1:]] 
# Convert to floats 
origin = [float(origin[1]), float(origin[2])] 
data = [[float(x), float(y)] for x, y in data] 

# Get the min and max y-axis value and position 
min_y_val = float(selenium.get_eval(\ 
      "window.jQuery('svg g.highcharts-axis:eq(1) text:first').text()") 
max_y_val = float(selenium.get_eval(\ 
      "window.jQuery('svg g.highcharts-axis:eq(1) text:last').text()") 
min_y_pos = float(selenium.get_eval(\ 
      "window.jQuery('svg g.highcharts-axis:eq(1) text:first').attr('y')") 
max_y_pos = float(selenium.get_eval(\ 
      "window.jQuery('svg g.highcharts-axis:eq(1) text:last').attr('y')") 

# Calculate the value based on the retrieved positions 
y_scale = min_y_pos - max_y_pos 
y_range = max_y_val - min_y_val 
y_percentage = data[0][1] * 100.0/y_scale 
value = max_y_val - (y_range * percentage) 

声明:我没有时间去完全验证它,但沿着这些方向的东西应该给你你想要的。