2016-08-04 22 views
1

Ich versuche, LoginFailTest zu machen, ist die Idee, ein erfolgreiches Ergebnis zu geben, wenn die Anmeldung fehlschlägt und wenn es sich anmeldet, sollte es ein Test fehlgeschlagen Ergebnis geben.Erklärung in Selenium mit C#

Der HTML-Code hinter der Seite lautet:

<div id="waw1" class="grid" style="margin-top: 30px; padding-top: 20px;"> 
<div id="waw2" class="notice error"> 
<i class="icon-ok icon-large"/> 
Please make sure the Organization ID, User ID, and Password you entered are correct. 
<a href="#close" class="icon-remove"/> 
</div> 

Die C# -Code ist:

[TestClass] 
public class LoginFailTest : ibankTest 
{ 
[TestMethod] 
public void User_Login_Fail() 
{ 
Assert.IsTrue(LoginFail.Title, "Logged In"); 
} 
} 

Mein LoginFail Klassencode ist:

public class LoginFail 
{ 
public static bool Title 
{ 
get 
{ 
var title = Driver.Instance.FindElements(By.XPath("//*[@id='waw2']")); 
if (title != null) 
    return true; 
return false; 
} 
} 

Das Problem, das ich bin vor ist selbst wenn es sich anmeldet, gibt es ein erfolgreiches Testergebnis, es sollte mir hier ein Test fehlschlagen.

Kann mir bitte jemand helfen? Vielen Dank im Voraus

Antwort

1

Eigentlich sind Handling Sie die Bedingung auf der Grundlage von Elemente Existenz, die falsch ist, weil das Element mit der ID auf der Seite immer vorhandenen, müssen Sie Existenz von Text zu überprüfen, statt wie folgt:

var title = Driver.Instance.FindElements(By.XPath("//*[contains(text(), 'Please make sure the Organization ID, User ID, and Password you entered are correct.')]")); 
if (title.Count > 0) 
    return true; 
return false; 

Hinweis: - FindElements gibt immer eine Liste von IWebElements zurück, wenn sie sonst gefunden wird, gibt leere Liste zurück. Sie gibt null nicht zurück, so dass Sie die Anzahl überprüfen müssen, um sicherzustellen, dass die Liste leer ist oder nicht.

+0

Vielen Dank, es funktionierte das zweite Mal, als ich den Test lief :) –

+1

Sie könnten dies vereinfachen, indem Sie 'return (title.Count> 0)' anstelle der letzten drei Zeilen verwenden. – JeffC

+0

@JeffC ja toller Punkt .. :) –

0

Was tatsächlich passiert ist hier Sie verwenden: -

Assert.IsTrue(LoginFail.Title, "Logged In") 

und Ihre LoginFail.Title erwartet einen Booleschen Wert entweder true oder false, aber in diesem Fall, ob es wäre eine erfolgreiche oder Misserfolg Für die Anmeldung wird immer eine title für die Seite angezeigt. Der Wert LoginFail.Title gibt also immer true zurück.

Was Sie tatsächlich tun können, ist die title und einen genauen Vergleich mit dem Titel, den Sie erwarten.

Hoffe es hilft!

+0

Hey vielen Dank für die Antwort, also können Sie noch etwas anderes empfehlen, dass IsTrue? Ich habe AreEqual() verwendet, aber die Sache ist, wenn die Anmeldung fehlschlägt, wird der Test nicht bestanden, aber es sollte sein. –

+0

können Sie 'Assert.AreEqual (" ExpectedTitleInCaseOfLoginFailure "," ActualTitleInCaseOfLoginFailure ")' 'verwenden. In diesem Fall würden Sie, wenn ein Anmeldefehler auftritt, den genauen Titel und den gleichen Titel kennen, den Sie vergleichen können. – Paras