2016-09-27 3 views
0

Ich versuche, Automatisierung mit Selenium Webdriver lernen mit C#. Ich habe meine benutzerdefinierte Methode Assert. Was ich getan habe, um den Test fortzusetzen, nachdem ein AssertFailedException Fang verwendet try-catch unten ist mein CodeSelen C# weiter auf Fehler

public static void assert(string value, IWebElement element) 
    { 
     try 
     { 
      Assert.AreEqual(value, element.Text); 
     } 
     catch (AssertFailedException e) 
     { 
      Console.WriteLine(e.Message.ToString()); 
     } 
    } 

Mein Problem ist, alles AssertFailedException fängt (was mein Ziel ist), aber das Ergebnis des Tests ist in Visual Studio GEFüHRT. Meine Frage ist, wie implementiere ich Continue on Failure und falle den Test, wenn die Console Exceptions enthält. Vielen Dank im Voraus Jungs!

+0

Fangen Sie 'AssertFailedException' in Ihrer benutzerdefinierten Methode nicht ab. Entferne den try catch-Block. –

+0

Weisen Sie im catch-Block eine boolesche Variable zu und verwenden Sie am Ende des Tests denselben Wert, um den Test zu beenden. –

+0

@SudharsanSelvaraj Wenn ich den Block "try catch" entferne, wird die Ausführung des Tests gestoppt, wenn die Assert-Methode fehlschlägt. Was ich brauche ist, den Test bis zum Ende der Ausführung fortzusetzen. Vielen Dank! – creulo

Antwort

0

Sie könnten versuchen, für kleinere Prüfungen Verify statt Assert zu verwenden. Die standardmäßig angewendete Option zeigt einen größeren Prüfpunkt an, und die Skriptausführung wird bei einem Fehler beendet. Wenn Sie diese Ausnahme abfangen, wird die Berichterstellung ignoriert. Dies ist das erwartete Verhalten. Eine Überprüfung zeigt jedoch an, dass das Skript auch bei einem Fehler fortgesetzt werden kann. In diesem Fall wird der fehlgeschlagene Schritt gemeldet und das Skript wird fortgesetzt.

Um es einfach auszudrücken, verwenden Sie bestätigen, wenn das Skript bei einem Fehler fortgesetzt werden soll, und verwenden Sie überprüfen, wenn das Skript den Fehler melden und fortfahren soll.

+0

Jetzt verstehe ich, was 'Assert' wirklich tut. Kann ich fragen, wie ich eine "Verify" -Methode mache? :) – creulo

0

Soweit ich es verstehe, möchten Sie mehrere Prüfungen in Ihrem Test durchführen, und ganz am Ende, um festzustellen, ob einige von ihnen fehlgeschlagen sind. Möglicherweise müssen Sie einen benutzerdefinierten Code schreiben, um dies zu erreichen. Zum Beispiel können Sie eine Klasse Assertion vorstellen:

internal class Assertion 
{ 
    private readonly string title; 
    private readonly object expected; 
    private readonly object actual; 

    public Assertion(string title, object expected, object actual) 
    { 
     this.title = title; 
     this.expected = expected; 
     this.actual = actual; 
    } 

    public bool IsMatch() 
    { 
     return this.actual == this.expected; 
    } 

    public override string ToString() 
    { 
     return $"Title: {title}. Expected: {expected}. Actual: {actual}"; 
    } 
} 

Wenn Ihr Test läuft, werden Sie neue Instanzen von Assertion Klasse erstellen und speichern sie in einer Liste an. Am Ende des Tests können Sie die folgende Methode verwenden:

private static void VerifyAssertions(Assertion[] assertions) 
    { 
     var failedAssertions = assertions.Where(a => !a.IsMatch()).ToArray(); 
     if (failedAssertions.Any()) 
     { 
      throw new AssertFailedException(string.Join<Assertion>("; ", failedAssertions)); 
     } 
    } 
+0

Sehr nette Logik und Code. Ich werde es jetzt versuchen und dir das Ergebnis danach melden. Vielen Dank @oldbam – creulo