用Selenium WebDriver测试Highcharts
我想用Python和Selenium Webdriver来测试一个Highcharts图表的准确性,这个图表是从一个我已经读取的JSON文件中获取数据的。
请问我该如何从网站上读取Highcharts的数据呢?
谢谢,
Evgeny
1 个回答
2
Highcharts的数据会被转换成一种叫做SVG路径的格式,所以你需要自己去理解这个路径。我其实不太明白你为什么想这么做:一般来说,你可以信任第三方库,它们应该能按预期工作;这些代码的测试应该在那个库里完成。
如果你还是想这么做,那你就得深入学习一下JavaScript来获取数据。以Highcharts演示为例,你可以提取第一条线的数据点,像下面这样。这会给你一个SVG路径定义的字符串,然后你可以解析这个字符串来确定起点和数据点。把这些数据和纵轴的大小进行比较,就能计算出图表所暗示的值。
# 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)
免责声明:我没有时间完全验证这个,但类似的思路应该能帮你实现你的需求。