我在java中运行Selenium测试后得到了一些帮助,我在页面上有SVG高图表图像。我遇到的问题是,我无法获取selenium来识别高图表上的每个元素,然后点击它们来触发另一个事件。
我已经在下面附上了截图,我希望能够突出显示我要做的事情
我不认为HTML代码段在屏幕截图中是清晰的,所以我在下面概述了这一点:
<div id="status-action-counts" class="two-by-two-chart" data-highcharts-chart="0">
<div id="highcharts-0" class="highcharts-container" style="position: relative; overflow: hidden; width: 588px; height: 300px; text-align: left; line-height: normal; z-index: 0; font-family: "Lucida Grande","Lucida Sans Unicode",Verdana,Arial,Helvetica,sans-serif; font-size: 12px; left: 0.133331px; top: 0.916672px;">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="588" height="300">
<desc>Created with Highcharts 3.0.4</desc>
<defs>
<rect rx="5" ry="5" fill="#FFFFFF" x="0" y="0" width="588" height="300">
<g class="highcharts-grid" zIndex="1">
<g class="highcharts-grid" zIndex="1">
<g class="highcharts-axis" zIndex="2">
<g class="highcharts-axis" zIndex="2">
<g class="highcharts-series-group" zIndex="3">
<g class="highcharts-series highcharts-tracker" visibility="visible" zIndex="0.1" transform="translate(62,51) scale(1 1)" style="cursor:pointer;" clip-path="url(#highcharts-1)">
<rect fill="#ECB631" x="26.5" y="52.5" width="49" height="121" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
<rect fill="#ECB631" x="130.5" y="150.5" width="49" height="23" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
<rect fill="#ECB631" x="233.5" y="168.5" width="49" height="5" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
<rect fill="#ECB631" x="336.5" y="162.5" width="49" height="11" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
<rect fill="#ECB631" x="439.5" y="17.5" width="49" height="156" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
</g>
<g class="highcharts-markers" visibility="visible" zIndex="0.1" transform="translate(62,51) scale(1 1)">
</g>
基本上,我想点击“指导代理商”#39; highchart,然后将触发一个事件,让我继续我的测试。如果有人能提供一些帮助来帮助我,我会很感激。
CODE SNIPPET
public static void terminatedReportCompletedBarGraphSelect(InternetExplorerDriver driver)
{
WebElement parent = driver.findElement(By.className("highcharts-series-group"));
List<WebElement> children = parent.findElements(By.tagName("rect"));
children[0].Click();
}
更新 - 2014年11月25日 你好,我希望你能帮助解决我遇到的下一个问题。由于你的帮助,我现在已经能够选择条形图了。这样做是打开另一个条形图,我想点击它上面的元素。问题是className是&#34; Highcharts-series-group&#34;,与我使用的前一个元素定位器相同。我已经附上了我想要选择的选项的屏幕截图(右边是图表)
这是HTML的一个片段,只是因为它不可见:
<div id="controller-breakdown" class="two-by-two-chart" style="display: block;" data-highcharts-chart="1">
<div id="highcharts-2" class="highcharts-container" style="position: relative; overflow: hidden; width: 588px; height: 300px; text-align: left; line-height: normal; z-index: 0; font-family: "Lucida Grande","Lucida Sans Unicode",Verdana,Arial,Helvetica,sans-serif; font-size: 12px; left: 0.083313px; top: 0.916672px;">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="588" height="300">
<desc>Created with Highcharts 3.0.4</desc>
<defs>
<rect rx="5" ry="5" fill="#FFFFFF" x="0" y="0" width="588" height="300">
<g class="highcharts-grid" zIndex="1">
<g class="highcharts-grid" zIndex="1">
<g class="highcharts-axis" zIndex="2">
<g class="highcharts-axis" zIndex="2">
<g class="highcharts-series-group" zIndex="3">
<g class="highcharts-series highcharts-tracker" visibility="visible" zIndex="0.1" transform="translate(61,51) scale(1 1)" style="cursor:pointer;" clip-path="url(#highcharts-3)">
<rect fill="#ECB631" x="67.5" y="32.5" width="124" height="183" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
<rect fill="#ECB631" x="325.5" y="118.5" width="124" height="97" stroke="#FFFFFF" stroke-width="1" rx="0" ry="0">
</g>
<g class="highcharts-markers" visibility="visible" zIndex="0.1" transform="translate(61,51) scale(1 1)">
</g>
我希望通过编写下面的代码,我可以从右侧的图表中选择一个条形图。我的想法是,我不知何故需要使用&#39; div id =&#34; controller-breakdown&#39;元素,以识别我想要达到的代码块,因为这是唯一的。
public static void relationalBarChartSelector(InternetExplorerDriver driver)
{
WebElement parent = driver.findElement(By.id("controller-breakdown"));
List<WebElement> children = parent.findElements(By.tagName("rect"));
children.get(1).click();
}
你有什么想法?
答案 0 :(得分:1)
希望这可能有所帮助 - HighCharts
答案 1 :(得分:1)
这对我有用(c#我很害怕)。没有一种简单的方法来识别哪个数据在哪个矩形中,所以除非您已经知道该系列的顺序,否则可能会出现问题:
IList<IWebElement> bars = MyWebDriver.Driver.FindElements(By.TagName("rect"));
foreach (var bar in bars)
{
Thread.Sleep(500);
try
{
bar.Click();
}
catch (Exception e)
{
}
}