首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Selenium使用高图表SVG图像

用Selenium使用高图表SVG图像
EN

Stack Overflow用户
提问于 2014-11-24 10:02:28
回答 2查看 1.6K关注 0票数 1

在java中运行Selenium测试时,我需要一些帮助,在java中,页面上有SVG高图表图像。我遇到的问题是,我很难让selenium识别高图表上的每一个元素,然后点击它们来触发另一个事件。

我在下面附上了一张截图,希望能突出我想做的事情

我不认为HTML片段在屏幕截图上是清晰的,因此我在下面概述了以下内容:

代码语言:javascript
复制
    <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>

本质上,我想点击‘指示代理’的高图表,这将触发一个事件,并允许我继续我的测试。如果有人能提供一些帮助让我上路,我会很感激的。

代码片段

代码语言:javascript
复制
    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();
    }

UPATE - 25/11/14嗨,我希望你能帮上我遇到的下一期。由于您的帮助,我现在可以选择条形图了。然后打开另一个条形图,我想点击其中的一个元素。问题是,className是“高级图表-系列-组”,与我以前使用的元素定位器相同。我在下面附上了我要选择的选项的截图(这是右边的图表)。

下面是HTML的一个片段,以防它不可见:

代码语言:javascript
复制
<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>

我希望通过编写下面的代码,我可以从右边的图表中选择一个条形图。我的想法是,在某种程度上,我需要使用'div id=‘控制器-故障’元素来识别我试图到达的代码块,因为这是唯一的。

代码语言:javascript
复制
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();
}

你的想法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 10:41:42

这对我有用(恐怕是c#)。要确定哪个数据位于哪个矩形中,没有一种简单的方法,因此,除非您已经知道系列的顺序,否则可能是一个问题:

代码语言:javascript
复制
IList<IWebElement> bars = MyWebDriver.Driver.FindElements(By.TagName("rect"));
foreach (var bar in bars)
{
    Thread.Sleep(500);
    try
    {
        bar.Click();
    }
    catch (Exception e)
    {
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-11-24 10:30:23

希望这能帮上忙- HighCharts

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27102131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档