2016-01-06 6 views
18

私は画面上で画像を見つけようとしていますが、2つの方法でやってみましたが、それはうまくいかないようです。 IOSシミュレータを実行しているAppiumでこれを実行しようとしていますが、これはスクリーンショットの問題ではありません。私はMAC OSXエルキャピタン を実行していますSikuli X Javaで画像を見つける

私は

私もMAC Sikuliライブラリjarファイルをインポートする必要がありますか私のプロジェクトでSikuli X用のJava APIをインポートしていますか?

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

:/ユーザー/ ealiaj /デスクトップ/オートメーション/ワークスペース/ WheelsUpを見つけることができません - SでIOS/screenshot1.jpg(0)[0,0 1440×900] ライン2189これは、画面上の画像である

Image trying to find ファイルRegion.javaに、大きな赤い長方形は、私が見つけることを試みるが、そのエラーを取得し、ためにスクリーンショットを作成した画像です。

私が首尾よく見つけることができるのは、灰色の矩形であるか、少なくともそれはエラーを投げないということです。

+1

あなたはSikuliを使用せずにこれを行うことができます。特定の要素のスクリーンショット(取得したいもの)をキャプチャするappiumの関数を作成し、実行時にシステムに保存します。 Javaコードを使用してベースイメージファイルとマッチさせます。 –

+1

サンプルコードを入力してください。ありがとう – Elsid

+0

あなたはあなたが見ている正確なエラーを投稿できますか? – eis

答えて

1

エラーメッセージは、それが.PNGファイルを探しているプログラムであり、コード内に.JPGファイルが置かれているというメッセージです。

+0

ファイルタイプを.PNGに変更したときに残っていたことは残念ですが、.PNGはその両方です。 – Elsid

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");  
} 
+0

2つの画像がまったく同じであることを確認しますか?私は画面内の画像を見つけようとしています。たとえば、画像全体のボタンを見つけることができます。ありがとう – Elsid

+0

はい、まったく同じ2つの画像が見つかります。私は私の側に2つの画像をテストするためにそれを使用し、それは動作します。ありがとう。 – Gaurav

+0

こんにちはGauravは、画面全体であるimage1と、ボタンであるimage2を持っていますが、これはimage2の中のimage1を見つけるでしょうか? – Elsid