2016-08-04 4 views
1

Я пытаюсь сделать LoginFailTest, идея состоит в том, чтобы дать успешный результат, если Login Fails и если он входит в систему, он должен дать результат теста с ошибкой.Утверждение утверждения в Selenium с использованием C#

HTML-код позади странице:

<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> 

C# код:

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

Мой класс LoginFail код:

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

Проблема, с которой я столкнулся даже если он входит в систему, он дает успешный результат теста, он должен дать мне результат Test Fails.

Может кто-нибудь помочь? Заранее спасибо

ответ

1

На самом деле вы регулируете условие на основе элемента существования, которое является неправильным, потому что элемент с идентификатором всегда существует на странице, вам необходимо проверить наличие текста, а не как показано ниже:

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; 

Примечание: - FindElements всегда возвращает список IWebElements, если в противном случае возвращает пустой список, он не возвращает null, поэтому вам нужно проверить его количество, чтобы проверить, что список пуст или нет.

+0

Большое вам спасибо, он работал во второй раз, когда я запустил тест :) –

+1

Вы можете упростить это, используя 'return (title.Count> 0)' вместо трех последних строк. – JeffC

+0

@JeffC да, отличная точка .. :) –

0

Что на самом деле происходит здесь вы используете: -

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

и ваш LoginFail.Title ожидает логическое значение либо true или false, но в этом случае существует ли будет успешным или неуспех для входа в систему у него всегда будет title. Поэтому значение LoginFail.Title всегда возвращается true.

Что вы можете на самом деле сделать, это получить title и сделать точное сравнение с названием, которое вы ожидаете.

Надеюсь, это поможет!

+0

Эй, спасибо за ответ, так что вы можете порекомендовать что-нибудь еще, что IsTrue? я использовал AreEqual(), но дело в том, когда логин завершается с ошибкой, тест не проходит, но он должен быть. –

+0

вы можете использовать 'Assert.AreEqual (« ExpectedTitleInCaseOfLoginFailure »,« ActualTitleInCaseOfLoginFailure »)'. В этом случае всякий раз, когда произойдет сбой входа в систему, вы знаете точное название и то же, что можете сравнить. – Paras

Смежные вопросы