使用 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 需要一个布尔值 truefalse,但在这种情况下,无论登录成功还是失败,它总会有一个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 所以你需要检查它的计数来验证列表是否为空。