Как да извършите сравнение на изображения в 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