在Sikuli X Java中查找图像

时间:2016-01-06 03:37:51

标签: java selenium-webdriver webdriver appium sikuli

我在尝试在屏幕上找到图像时遇到问题,我尝试以两种不同的方式进行操作,但它似乎对我不起作用。 我正在尝试使用在IOS模拟器上运行的Appium,它出现在屏幕上,所以我不认为这是一个截图的问题。

我正在运行MAC OSX El Capitan 我在项目中导入了Sikuli X java API

我是否还需要导入MAC Sikuli Library jar?

这是我到目前为止所尝试的:

1

Screen s = new Screen();
Pattern test = new Pattern("/Users/ealiaj/Desktop/Automation/workspace/WheelsUp - IOS/screenshot.jpg");
try {
    s.find(test);
} catch (FindFailed e) {

}

2

Screen s = new Screen();
try {
    s.find("screenshot.jpg");
} catch (FindFailed e) {

}

我一直在找不到错误。

错误消息:

  

FindFailed:无法找到/ Users / ealiaj / Desktop / Automation / workspace / WheelsUp - SOS中的IOS / screenshot1.jpg [0,0 1440x900]     第2189行,在文件Region.java中

Image trying to find 这是屏幕上的图像,大红色矩形是我为其创建截图并尝试查找的图像,但是得到了这个错误。

我唯一能够成功找到的是灰色矩形,或者至少它不会引发错误。

2 个答案:

答案 0 :(得分:2)

您可以使用此方法验证图片:

@Test
public void verifyImages() {    

    //WebElement img = driver.findElementByClassName("android.widget.ImageView");

   //take screen shot
    File screen = ((TakesScreenshot) driver)
                        .getScreenshotAs(OutputType.FILE);


    //capture image of searched contact icon
    List<WebElement > imageList = driver.findElementsByXPath("//*[@class='android.widget.ImageView' and @index='0']");
    System.out.println(imageList.size());

    System.out.println(i);
    WebElement image = imageList.get(1);
    Point point = image.getLocation();

    //get element dimension
    int width = image.getSize().getWidth();
    int height = image.getSize().getHeight();

    BufferedImage img = ImageIO.read(screen);
    BufferedImage dest = img.getSubimage(point.getX(), point.getY(), width,
                                                                 height);
    ImageIO.write(dest, "png", screen);
    File file = new File("Menu.png");
    FileUtils.copyFile(screen, file);

    //verify images
    verifyImage("Menu.png", "Menu.png" );
}



public void verifyImage(String image1, String image2) throws IOException{
    File fileInput = new File(image1);
    File fileOutPut = new File(image2);

    BufferedImage bufileInput = ImageIO.read(fileInput);
    DataBuffer dafileInput = bufileInput.getData().getDataBuffer();
    int sizefileInput = dafileInput.getSize();                     
    BufferedImage bufileOutPut = ImageIO.read(fileOutPut);
    DataBuffer dafileOutPut = bufileOutPut.getData().getDataBuffer();
    int sizefileOutPut = dafileOutPut.getSize();
    Boolean matchFlag = true;
    if(sizefileInput == sizefileOutPut) {                         
       for(int j=0; j<sizefileInput; j++) {
             if(dafileInput.getElem(j) != dafileOutPut.getElem(j)) {
                   matchFlag = false;
                   break;
             }
        }
    }
    else                            
       matchFlag = false;
    Assert.assertTrue(matchFlag, "Images are not same");    
 }

答案 1 :(得分:1)

错误消息显示该程序正在查找.PNG文件,而在您的代码中,您正在放置.JPG文件。