如何使用Selenium,Java自动化图形

时间:2014-04-17 08:57:19

标签: java selenium selenium-webdriver

我将数据注入Web应用程序,它会生成图形和饼图。我想通过Selenium测试图表上的结果是否与给定数据一致。有任何想法吗?谢谢,最好的问候!!!

4 个答案:

答案 0 :(得分:0)

假设您的图形具有Javascript模型(例如数组),您可以使用assertEval命令断言此类数组的内容。

答案 1 :(得分:0)

我发布了饼图问题最基本但最基本的例子, 在这里,我将以雅虎的YUI为基础的PIE图表作为我的例子。 在每次刷新时,所有部分都是动态创建的,所以我在元素的id中使用contains。在图表中,控件不是简单的HTML,但这些是svg(HTML5控件),所以在找到这些时我们需要在xpath中使用// *。

我的动机是在PIE图表中找到这些动态部分(在当前图表中有5个部分)

点击每个部分并打印这些部分的工具提示文字。

Out out就像。 Violette Part:day:Monday 税:2000

灰色部分:白天:星期五 税:2000

Light Violette Part:day:Thursday 税:200

绿色部分:白天:星期三 税:4000

布朗部分:日:星期二 税:50 0.61%

以下是演示程序,只要你可以执行它......:)

 package tests;

 import java.util.concurrent.TimeUnit;
 import org.openqa.selenium.By; 
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.firefox.FirefoxDriver;


 public class testCode {
 public static WebDriver driver;

 public static void main(String[] args) throws InterruptedException {

 driver = new FirefoxDriver();
 driver.get("http://yuilibrary.com/yui/docs/charts/charts-pie.html");

 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

 **//FIND DIFFERENT SECTIONS IN PIE CHART**

 WebElement ViolettePart = driver.findElement(By.xpath("//*   [contains(@id,'yui_3_13_0_1_')][contains(@class,'yui3-svgSvgPieSlice')][@fill='#66007f']"));
 WebElement GreenPart = driver.findElement(By.xpath("//*[contains(@id,'yui_3_13_0_1_')][contains(@class,'yui3-svgSvgPieSlice')][@fill='#295454']"));
 WebElement GreyPart = driver.findElement(By.xpath("//*[contains(@id,'yui_3_13_0_1_')][contains(@class,'yui3-svgSvgPieSlice')][@fill='#e8cdb7']"));
 WebElement LightViolettePart = driver.findElement(By.xpath("//*[contains(@id,'yui_3_13_0_1_')][contains(@class,'yui3-svgSvgPieSlice')][@fill='#996ab2']"));
 WebElement BrownPart = driver.findElement(By.xpath("//*[contains(@id,'yui_3_13_0_1_')][contains(@class,'yui3-svgSvgPieSlice')][@fill='#a86f41']"));

 **//TOOLTIP OVER PIE CHART**

 WebElement ToolTip = driver.findElement(By.xpath("//div[contains(@id,'_tooltip')]"));

 **//CLICK EACH SECTION OF PIE CHART AND GET THE TEXT OVER IT**

 ViolettePart.click();
 System.out.println("Violette Part:"+ToolTip.getText());
 GreyPart.click();
 System.out.println("Grey Part:"+ToolTip.getText());
 LightViolettePart.click();
 System.out.println("Light Violete Part:"+ToolTip.getText());
 GreenPart.click();
 System.out.println("Green Part:"+ToolTip.getText());
 BrownPart.click();
 System.out.println("Brown Part:"+ToolTip.getText());
 } }

答案 2 :(得分:0)

除非您只是验证有关图表的元数据(字幕,一些JSON属性等),否则您将不得不使用图像比较。您可以定义一个基线图像,该图像表示结果应该是什么样的,并且您的测试与参考进行比较。

由于可靠地测试图像并非易事,因此您可以使用Ocular等库。

答案 3 :(得分:0)

如果它是条形图,那么您可以使用“findElements”识别所有条形和标签,然后您可以在标签之间进行迭代,如果文本与您提供的输入匹配,则使用 Actions 类获取标签文本在该栏上移动,然后您可以验证工具提示上的数据。

要从图中获取任何 xpath,您可以在 xpath 中使用 * 代替标记名,例如

//*[@class='ABC']

您可以对饼图执行相同的过程,但需要稍作修改