我将数据注入到一个Web应用程序中,它会生成一个图形和一个饼图。我想通过Selenium测试图形上的结果是否与给定的数据一致。有什么想法吗?谢谢,最好的问候!!!
yftpprvb1#
假设你的图有一个Javascript模型(例如一个数组),你可以使用assertEval命令Assert这个数组的内容。
js81xvg62#
我将为您的饼图问题发布最基本的示例,这里我以Yahoo的基于YUI的PIE图为例。在每次刷新中,所有部分都是动态创建的,因此我在元素的id中使用contains。在图表中,控件不是简单的HTML,而是svg(HTML5控件),因此在查找这些控件时,我们需要在xpath中使用//*。我的目的是在PIE图中找到这些动态部分(在当前图中有5个部分)单击每个部分并打印这些部分的工具提示文本。输出将是这样的。紫罗兰部分:天:周一税:2000灰色部分:天:周五税费:2000浅紫罗兰色部分:天:周四税: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()); } }
hgtggwj03#
除非你可以只验证图表的元数据(标题,一些JSON属性等),否则你必须使用图像比较。你定义一个基线图像来表示结果应该是什么样的,然后你的测试与参考进行比较。由于可靠地测试图像并非易事,因此可以使用Ocular之类的库。
h7wcgrx34#
如果它是一个条形图,那么你可以使用“findElements”来识别所有的条形图和标签,然后你可以在标签之间迭代,如果文本与你给出的输入相匹配,那么你可以使用Actions类在条形图上移动,然后你可以验证工具提示上的数据。要从图形中获取任何xpath,您可以在xpath中使用 * 来代替标记名,例如//*[@类别='ABC']您可以按照相同的过程为饼图,但它将有一些修改
4条答案
按热度按时间yftpprvb1#
假设你的图有一个Javascript模型(例如一个数组),你可以使用assertEval命令Assert这个数组的内容。
js81xvg62#
我将为您的饼图问题发布最基本的示例,这里我以Yahoo的基于YUI的PIE图为例。在每次刷新中,所有部分都是动态创建的,因此我在元素的id中使用contains。在图表中,控件不是简单的HTML,而是svg(HTML5控件),因此在查找这些控件时,我们需要在xpath中使用//*。
我的目的是在PIE图中找到这些动态部分(在当前图中有5个部分)
单击每个部分并打印这些部分的工具提示文本。
输出将是这样的。紫罗兰部分:天:周一税:2000
灰色部分:天:周五税费:2000
浅紫罗兰色部分:天:周四税:200
绿色部件:天:星期三税:4000
棕色部件:日期:星期二税:50岁0.61%
这里是它的演示程序,任何地方你都可以执行它...:)
hgtggwj03#
除非你可以只验证图表的元数据(标题,一些JSON属性等),否则你必须使用图像比较。你定义一个基线图像来表示结果应该是什么样的,然后你的测试与参考进行比较。
由于可靠地测试图像并非易事,因此可以使用Ocular之类的库。
h7wcgrx34#
如果它是一个条形图,那么你可以使用“findElements”来识别所有的条形图和标签,然后你可以在标签之间迭代,如果文本与你给出的输入相匹配,那么你可以使用Actions类在条形图上移动,然后你可以验证工具提示上的数据。
要从图形中获取任何xpath,您可以在xpath中使用 * 来代替标记名,例如
//*[@类别='ABC']
您可以按照相同的过程为饼图,但它将有一些修改