我正在尝试创建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;
}
}
我面临的问题是,即使它登录,它正在给出一个成功的测试结果,它应该在这里给我一个测试失败的结果。
有人可以帮忙吗? 提前致谢
答案 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.Title
或true
,但在这种情况下,无论登录是成功还是失败,它都会有{{} 1}}用于页面。因此,值false
始终返回title
。
您实际可以做的是获取LoginFail.Title
并与您期望的标题进行精确比较。
希望它有所帮助!