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

使用Selenium选择关系型高图SVG图像
EN

Stack Overflow用户
提问于 2014-11-25 14:56:11
回答 2查看 1.1K关注 0票数 1

按照下面的截图,我在左边有一个条形图,当我点击它时,打开右边的条形图。

然后打开另一个条形图,我想点击其中的一个元素。问题是,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=‘控制器-故障’),然后从那里向下钻到'g class=‘高图集-系列高图表跟踪器’,这样我就可以选择一个'rect‘值来单击条形图。但是,因为这是一个SVG映像,所以我在做这个工作时遇到了问题。我试图用Selenium编写的代码如下:

代码语言: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(0).click();
}

有人能提供任何帮助吗?

原始代码

**

代码语言:javascript
复制
    public static void barChartSelector(InternetExplorerDriver driver)
{
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    WebElement parent = driver.findElement(By.className("highcharts-series-group"));
    List<WebElement> children = parent.findElements(By.tagName("rect"));
    children.get(0).click();
}
EN

回答 2

Stack Overflow用户

发布于 2014-11-25 16:00:59

如果您将为该特定元素编写xpath,然后在WebElement上执行操作,那么work.The代码(我提供的work.The代码对me.you来说很好)可以试一试。如果您想单击每个rect标记元素,那么您可以使用一个for循环,并传递增量变量,而不是像recti一样在rect1中的1。

代码语言:javascript
复制
public static void relationalBarChartSelector(InternetExplorerDriver driver)
{
    WebElement element = driver.findElement(By.xpath("//div[@id='highcharts-2']/svg/defs/g[6]/rect[1]"));
    element.click();
}
票数 0
EN

Stack Overflow用户

发布于 2017-07-28 12:57:11

尝尝这个。它将定位任何级别的“高级图表-系列-组”。

代码语言:javascript
复制
public static void relationalBarChartSelector(InternetExplorerDriver driver)
{
    WebElement element = driver.findElement(
      By.xpath(".//*[@class='highcharts-series-group']"));
    element.click(); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27129894

复制
相关文章

相似问题

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