Selenium无法在图表上找到条形图

时间:2017-11-27 10:26:26

标签: selenium selenium-webdriver

请帮助解决此问题。我有使用devexpress编写的图表。

http://image.ibb.co/hRD5oR/chart.png

我对Selenium进行了这样的测试。它打开一个包含图表的页面并单击所有元素(最小化/最大化,展开/折叠)。这是代码:

driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/div[2]/div/svg/g[8]/g/g/rect[1]")).click();

此步骤的测试失败:

public void inputGrades()
{
    Scanner input = new Scanner(System.in);

    int grade;

    System.out.printf("%s\n%s\n %s\n %s\n",
            "Enter the integer grades in the range 0-100.",
            "Type the end-of-file indicator to terminate input:",
            "On UNIX/Linux/Mac OS X type <ctrl> d then press Enter",
            "On Windows type <ctrl> z then press Enter");

    while( input.hasNext())
    {
        grade = input.nextInt();
        total += grade;
        ++gradeCounter;

        incrementLetterGradeCounter(grade);
    }
}

Selenium找不到这个酒吧。我想svg有一些细微差别。 请告知如何解决它。

1 个答案:

答案 0 :(得分:0)

我将回答你的问题,但有多种解决方案。 现在,如果你总是有5个小节,你的问题很容易解决。

如果是5个小节,整个页面上总是5个小节:

这将返回5个元素:

driver.FindElement(By.XPath("//g[@class='dxc-markers']/rect");

可以肯定的是,在Chrome中点击F12,点击Console,例如:$ x(&#34; // g [@class =&#39; dxc-markers&#39;] / rect&#34;)< / p>

现在,如果您要获得5个元素,请使用:

driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[1]");
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[2]");
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[3]");
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[4]");
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[5]");

现在,如果条形图的数量是可变的,则需要创建一个元素数组。一旦你有了数组,而不是[1]在那里插入数组值,你就被设置了。