使用C#在Selenium中声明语句

时间:2016-08-04 16:30:42

标签: c# selenium assert

我正在尝试创建LoginFailTest,想法是在登录失败时给出一个成功的结果,如果它登录,它应该给出一个测试失败的结果。

页面后面的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;
 }
 }

我面临的问题是,即使它登录,它正在给出一个成功的测试结果,它应该在这里给我一个测试失败的结果。

有人可以帮忙吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

实际上你是在元素存在的基础上处理条件是错误的,因为页面上始终存在id的元素,你需要检查文本是否存在,如下所示:

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所以你需要检查它的计数以验证列表是是否为空。

答案 1 :(得分:0)

这里实际发生的是你正在使用: -

public boolean getTermsCheckbox()
{
    return termsCheckbox;
}

并且您的Assert.IsTrue(LoginFail.Title, "Logged In") 期望布尔值为LoginFail.Titletrue,但在这种情况下,无论登录是成功还是失败,它都会有{{} 1}}用于页面。因此,值false始终返回title

您实际可以做的是获取LoginFail.Title并与您期望的标题进行精确比较。

希望它有所帮助!