使用 C# 在 Selenium 中断言语句
Assert statement in Selenium using C#
我正在尝试进行 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 class 代码是:
public class LoginFail
{
public static bool Title
{
get
{
var title = Driver.Instance.FindElements(By.XPath("//*[@id='waw2']"));
if (title != null)
return true;
return false;
}
}
我面临的问题是即使它登录了,它也给出了成功的测试结果,它应该在这里给我一个测试失败的结果。
有人可以帮忙吗?
提前致谢
这里实际发生的是您正在使用:-
Assert.IsTrue(LoginFail.Title, "Logged In")
并且您的 LoginFail.Title
需要一个布尔值 true
或 false
,但在这种情况下,无论登录成功还是失败,它总会有一个title
页面。所以值 LoginFail.Title
总是返回 true
。
您实际上可以做的是获取 title
并与您期望的标题进行精确比较。
希望对您有所帮助!
实际上您是根据元素存在性来处理条件,这是错误的,因为具有 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
总是 return 的 IWebElements 列表,否则 return 的空列表,它不会 return null
所以你需要检查它的计数来验证列表是否为空。
我正在尝试进行 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 class 代码是:
public class LoginFail
{
public static bool Title
{
get
{
var title = Driver.Instance.FindElements(By.XPath("//*[@id='waw2']"));
if (title != null)
return true;
return false;
}
}
我面临的问题是即使它登录了,它也给出了成功的测试结果,它应该在这里给我一个测试失败的结果。
有人可以帮忙吗? 提前致谢
这里实际发生的是您正在使用:-
Assert.IsTrue(LoginFail.Title, "Logged In")
并且您的 LoginFail.Title
需要一个布尔值 true
或 false
,但在这种情况下,无论登录成功还是失败,它总会有一个title
页面。所以值 LoginFail.Title
总是返回 true
。
您实际上可以做的是获取 title
并与您期望的标题进行精确比较。
希望对您有所帮助!
实际上您是根据元素存在性来处理条件,这是错误的,因为具有 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
总是 return 的 IWebElements 列表,否则 return 的空列表,它不会 return null
所以你需要检查它的计数来验证列表是否为空。