2016-08-03 6 views
0

Ich verwende den ImageComparer in meinem mobilen Testprojekt und kann ein Basisbild mit einem aktuellen Screenshot vergleichen, aber das Problem tritt dort auf, wo sich ein Teil des Screenshots ständig ändert und ich diesen Teil ausschließen möchte aus dem Vergleich. Hier ist mein Code:Verwenden von ImageComparer, wie kann ich einen mittleren Abschnitt eines ToleranceRectangle von einem Vergleich ausschließen?

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); 
    } 

Hier ist ein Beispiel (nicht die App getestet wird), wo Ich mag würde den Bereich innerhalb des roten Rechtecks ​​aus dem Gesamt Screenshot ausschließen verglichen werden.

Mobile Screenshot Example

Gibt es eine einfache Möglichkeit, dies zu tun?

+0

ich mit dem Hinzufügen von einzelnen Abschnitten in der Liste bin experimentieren , aber dies erfordert mich Rechtecke für die Spitze an, die Seiten und unter dem Bereich, den ich ausschließen möchten. Wäre schön, stattdessen nur ein Rechteck zum Ausschließen zu haben. – RKelley

Antwort

0

Es wurde ein besserer Ansatz gefunden, als zu versuchen, einen Abschnitt vom Vergleich auszuschließen. Dank eines Mitarbeitervorschlags verdunkele ich die Abschnitte, die kein Vergleichen und Speichern dieses Bildes benötigen. Wenn Sie dies auf dem Basisbild und dem Screenshot tun, haben Sie den gleichen Effekt, als würden Sie es komplett ausschließen. Hier ist der Code:

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"); 
Verwandte Themen