2

ヘッドレスで実行するテスト サーバーがあります。私が望むテストの 1 つは、特定の URL から提供された画像が参照画像と一致することを確認することです。

画像をストリームとして直接受け取り、それをローカル リソース ファイルから取得した他の画像と比較できる Sikuli の API はありますか? 残念ながら、Sikuli の Java API に関する完全なチュートリアルはありません。私が見つけたのは、利用可能なディスプレイがあることを前提としたチュートリアルだけです。

例や、少なくとも Sikuli javadocs の必要な部分へのリンクがあれば幸いです。また、他のアプローチの提案も歓迎します。

4

2 に答える 2

4

Sikuli を使用するには、次のものが必要です

  1. 他のイメージが検索されるベース イメージ。
  2. 他の画像内で検索される画像。

画像 1 がローカル リソースの画像である場合、画像へのパスと検索されるこの画像のリージョンを使用して org.sikuli.Finder インスタンスを作成できます。例 (Java レベル):

finder = new Finder("path/to/image", new Region(0, 0, <imgwidth>, <imgheight>));

画像 1 がストリームの場合、何らかの方法で BufferedImage を作成する必要があります (これを行う最善の方法はわかりません)。次に、java.awt.Rectangle と org.sikuli.Region を使用して、この BufferedImage から org.sikuli.ScreenImage を作成できます。

finder = new Finder(new ScreenImage(new Rectangle(0,0,<imgwidth>,<imgheight>), bufferedImage), new Region(0,0,<imgwidth>,<imgheight>))

画像 1 からファインダーを作成した後、この画像内で画像 2 を検索できます。

繰り返しますが、2 つの可能性があります。2 番目のイメージがローカル リソース イメージである場合、ファイルの場所を指定して org.sikuli.Pattern オブジェクトを作成できます。

pattern = new Pattern("path/to/image.png");

それ以外の場合、これがストリームの場合は、何らかの方法でストリームから BufferedImage を作成する必要があります。次に、この画像からパターンを作成できます。

pattern = new Pattnern(bufferedImage);

最後のステップとして、ファインダーを実行してパターンを検索できます。

finder.find(pattern);

ファインダーが何かを見つけたかどうかは、次の方法で確認できます。

finder.hasNext();

そして、次の方法ですべての調査結果を反復できるはずです。

for (Match m : finder):
    //do something with the match

あなたの質問はすでに数週間前のものですが、お役に立てれば幸いです。

于 2012-11-09T19:05:59.423 に答える
0

以下のコードは、画像のアサートに役立ちます

//スクリーンショットを撮る

  File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

 try {

//copy it some location

FileUtils.copyFile(scrFile, new File("C:\\screenshot.png"));
Finder f = new Finder("C:\\screenshot.png");
System.out.println("abc");
f.find("C:\\chrome3.png", 0.95);

while(f.hasNext()){

 System.out.println("found");
 Match m= f.next();
 f.destroy();
}

  }    
   catch (IOException e)
{
    e.printStackTrace();
  }
于 2015-03-11T13:14:09.740 に答える