Как выполнить сравнение изображений в Appium?

Мне нужна одна помощь. Я использую Appium, и у меня есть сценарий, в котором мне нужно захватить изображение из тестируемого приложения, сохранить это изображение в качестве базового изображения, а затем захватить другое изображение из этого тестируемого приложения, а затем выполнить сравнение изображений между этими двумя изображениями.

Может ли кто-нибудь помочь мне, как это сделать, пожалуйста.


person Sayom    schedule 17.02.2016    source источник


Ответы (1)


Вот как вы это делаете:

@Test(dataProvider = "search")
    public void eventsSearch(String data) throws InterruptedException, IOException {    
        Thread.sleep(2000);
        boolean status = false;

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

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


    // for (String event : events) {
    driver.findElementById("your id")
            .sendKeys(data);
    driver.hideKeyboard();
    List<WebElement> list = driver
            .findElementsByXPath("//*[@class='android.widget.TextView' and @index='1']");
    System.out.println(list.size());


    int i = 0;
    for (WebElement el : list) {
        String eventList = el.getText();
        System.out.println("events" + " " + eventList);
        if (eventList.equals("gg")) {
            status = true;
            break;
        }

        i++;
    }


    //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" );
    //Assert.assertTrue(status, "FAIL Event doesn't match" + data);
}

    @DataProvider(name = "search")
    public Object[][] searchData() {

    return new Object[][] { { "gg" } };
}


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");    
 }
person Gaurav    schedule 17.02.2016
comment
это хорошо. Спасибо. Но мне понадобится дополнительная помощь, где мне нужно сравнить 2 изображения, а затем, если изображения разные, мне нужно указать, насколько велика их разница с точки зрения пикселей или положения. Не могли бы вы помочь мне здесь? - person Sayom; 29.02.2016
comment
опубликуйте новый вопрос тогда. Думаю, я ответил на все, что вы просили. - person Gaurav; 29.02.2016