当图表只有 1 个路径元素时,我在使用 watir 测试 highcharts 时遇到问题。当您将鼠标悬停在图表上的线条上时,路径元素的坐标会发生变化。那么我怎样才能遍历这条线呢?示例演示 = http://www.highcharts.com/demo/line-time-series
问问题
360 次
2 回答
0
一种方法是使用图表上的 xpath。在 Firefox 浏览器上使用 Firepath 插件,当您在图形中移动鼠标时,每个位置都会有不同的 xpath。然后你可以做类似的事情
browser.element_by_xpath(".//*[@id='highcharts-0']/svg/g[6]/g[2]/path[2]']").click
并选择您需要的值。这样做,您可能无法为图中的每个位置提供准确的 xpath,但它几乎可以满足您的需求。
于 2013-07-23T19:54:12.517 回答
0
您可以解析 html 以提取用于创建图表的数据。这假设您并没有尝试实际测试图表本身(即您信任第三方库并且只需要将数据用于其他目的)。
require 'watir-webdriver'
require 'date'
b = Watir::Browser.new :firefox
b.goto 'http://www.highcharts.com/demo/line-time-series'
puts b.html
#Get the javascript that contains the data used to generate the chart
data_script = b.scripts.find{ |script| script.html =~ /data/ }.html
#Get the starting date from the script
point_start = /pointStart: Date.UTC\((2006), (0), (01)\)/.match(data_script)
date_start = Date.new(point_start[1].to_i, point_start[2].to_i+1, point_start[3].to_i)
#Get an array of the data values from the script
data_values = data_script.scan(/data: \[(.*?)\]/m)[0][0].gsub(/\s/, '').split(',')
#Create an array of all the dates.
#Assuming we know it is incremented by day (otherwise check the pointInterval)
dates = (date_start .. (date_start+data_values.length-1)).map do |day|
day.strftime("%b %e, %Y").squeeze(' ')
end
#Combine the dates and values
p dates.zip(data_values)
#=> [["Jan 1, 2006", "0.8446"], ["Jan 2, 2006", "0.8445"], ... , ["Dec 30, 2008", "0.7049"], ["Dec 31, 2008", "0.7095"]]
于 2013-07-25T21:01:21.400 回答