当图表只有1个路径元素时,我遇到了使用watir测试highcharts的问题。 当您将鼠标悬停在图表上的线条上时,路径元素的坐标会发生变化。那么我怎么能循环线? 示例demo = http://www.highcharts.com/demo/line-time-series
答案 0 :(得分:0)
这样做的一种方法是使用图表上的xpath。在firefox浏览器上使用Firepath附加组件,当您将鼠标移动到图形中时,每个位置都会有不同的xpath。然后你可以做类似
的事情browser.element_by_xpath(".//*[@id='highcharts-0']/svg/g[6]/g[2]/path[2]']").click
并选择您需要的值。这样做,您可能无法为图表中的每个位置提供准确的xpath,但它几乎可以满足您的需求。
答案 1 :(得分: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"]]