2016-08-03 7 views
0

私はモバイルテストプロジェクトでimagecomparerを使用していますが、ベースラインイメージを現在のスクリーンショットと比較することができますが、問題は、スクリーンショットのセクションが常に変化している部分であり、その部分を除外したい場合です比較されることから。ここに私のコードは次のとおりです。私が比較されているから、全体のスクリーンショットから赤い四角形の内側の領域を除外したいのはここImagecomparerを使用すると、ToleranceRectangleの中央のセクションを比較対象から除外できますか?

private bool RunVisualCheck(string screen, string resultsPath, string baseline = "baseline.jpeg", string screenshot = "screenshot.jpeg") 
    { 
     GetScreenshot(resultsPath + screenshot); 

     var baselineImage = Image.FromFile(resultsPath + baseline); 
     var actualImage = Image.FromFile(resultsPath + screenshot); 
     Image diffImage; 
     int ignoreTop = 64; 

     var compareArea = new List<ToleranceRectangle> 
     { 
      new ToleranceRectangle() 
      { 
       Rectangle = new Rectangle(0,ignoreTop,baselineImage.Width, baselineImage.Height - ignoreTop), 
       Difference = new ColorDifference() 
      } 
     }; 

     bool goodCompare = ImageComparer.Compare(actualImage, baselineImage, compareArea, out diffImage); 

     if (!goodCompare) 
     { 
      diffImage.Save(resultsPath + "diffImage.jpeg"); 
     } 

     return goodCompare; 
    } 

private void GetScreenshot(string pathFile) 
    { 
     System.Threading.Thread.Sleep(2000); // Temp fix to wait until page loads 

     var srcFiler = ((ITakesScreenshot)mobileDriver).GetScreenshot(); 

     srcFiler.SaveAsFile(pathFile, ImageFormat.Jpeg); 
    } 

は(アプリがテストされていない)の例です。

Mobile Screenshot Example

これを行う簡単な方法はありますか?

+0

私はリスト内の個々のセクションを追加することを試していますが、これは、トップ、サイドのために、私は除外したいエリアの下に四角形を追加するために私を必要とします。代わりに除外のための1つの四角形を持つだけでいいですか? – RKelley

答えて

0

セクションを比較対象から除外しようとするよりも優れたアプローチが見つかりました。同僚の提案のおかげで、私はこのイメージを比較して保存する必要のないセクションを黒くしています。ベースラインイメージとスクリーンショットでこれを行うと、それを完全に排除するのと同じ効果があります。ここでは、コードです:

Image image = Image.FromFile(@"C:\Screenshots\Screenshot.jpeg"); 

using (Graphics g = Graphics.FromImage(image)) 
{ 
    SolidBrush brush = new SolidBrush(Color.Black); 
    Size size = new Size(image.Width, 64); 
    Point point = new Point(0, 0); 
    Rectangle rectangle; 

    rectangle = new Rectangle(point, size); 

    g.FillRectangle(brush, rectangle); 
} 

image.Save(@"C:\Screenshots\Screenshot.jpeg"); 
関連する問題