我想找几年前在Google Selenium论坛上发布的this question解决方案(我发现最相似的事情......遗憾的是在论坛中没有发布回答)。在我的Selenium测试(Python绑定)中,如何点击Highcharts数据系列来触发onClick事件?我试图为条形图做这个,但任何例子都可行。手动这是有效的。当我点击数据系列时,会弹出一个新的div,其中包含有关该数据系列的其他信息,我想使用Selenium验证此操作。我可以使用ActionChains来显示系列工具提示,但由于某些原因,在Selenium中似乎没有触发click()事件。
我试图点击类'highcharts-series'的元素,这些元素的子元素以及整体父元素'highcharts-series-group'。我所取得的最大进步是点击该系列的儿童作品,因为我可以看到工具提示弹出(见截图)。但没有点击动作 - Selenium超时等待下一步。
一个原因可能是因为Highcharts组容器(highcharts-series-group)的zIndex高于我想要点击的元素(3对0.1)。但是点击整个组什么也没做,在真实的浏览器中,我相信我点击了一个实际的系列,而不是组容器 - 所以我假设因为它在真正的浏览器中工作,所以zIndex不应该影响我的点击?您可以在第二个屏幕截图中看到所有这些系列在svg元素中的排列方式。
这就是我现在尝试点击的方法。我按照this SO question中的解决方案构建了这个:
parent = self.browser.find_element_by_id('student_chart')
data_series = parent.find_elements_by_class_name('highcharts-series')
data_rect = data_series[0].find_element_by_tag_name('rect')
builder = ActionChains(self.browser)
series_click = builder.click(data_rect)
series_click.perform()
感谢您的帮助!
所以这看起来很完整,但是如果我使用for循环点击每个系列,最后一个“take”并且会发生预期的onClick事件。但是,当我手动测试时,点击任何单个系列都可以。触发最后一个系列的代码是:
parent = self.browser.find_element_by_id('student_chart')
data_series = parent.find_elements_by_class_name('highcharts-series')
for series in data_series:
rect = series.find_element_by_tag_name('rect')
if rect.text == '':
rect.click()
这似乎是一个完整的黑客只是为了让我的测试工作,所以我想知道是否有人知道为什么点击单个元素不起作用的根本原因,或者更简洁的方法来做到这一点?
谢谢!
所以我查看了Robbie在下面的回答中指出的库,它似乎使用ActionChains来构建与HighCharts的交互。该库很酷,显然适用于其他人,但作者似乎只能跟踪鼠标悬停事件...当我尝试下面代码的不同变体进行点击事件时,我只能显示工具提示 - 没有点击事件。所以我似乎仍然卡住了。 ActionChains似乎可以正常使用Selenium从HighCharts读取工具提示和值,但点击事件对我来说似乎仍然是一个谜......
parent = self.browser.find_element_by_id('student_chart')
data_series = parent.find_elements_by_class_name('highcharts-series')
series_number = 0
for series in data_series:
if series_number == 0:
click_object = series.find_element_by_tag_name('rect')
else:
pass
series_number += 1
builder = ActionChains(self.browser)
click_me = builder.click(click_object)
click_me.perform()
答案 0 :(得分:3)
你检查过这个项目吗? https://github.com/Ardesco/Powder-Monkey/tree/master/src/main/java/com/lazerycode/selenium/graphs
当我去年在Selenium C#中自动化Highcharts时,我能够剖析这个java项目并获得非常好的理解,然后用C#编写我自己的版本。
也许这可以给你一些想法和提示