2011-11-23 202 views
0

我想測試使用Python和Selenium Webdriver從一個JSON文件(我已經閱讀過)中呈現數據的Highcharts圖的準確性。使用selenium webdriver測試Highcharts

如何從網站上讀取Highchart數據?

謝謝你, 葉夫根尼·

回答

2

的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) 

聲明:我沒有時間去完全驗證它,但沿着這些方向的東西應該給你你想要的。

相關問題