使用 NUnit 在硒测试中使用验证
本文关键字:验证 测试 NUnit 使用 | 更新日期: 2023-09-27 18:37:15
在Selenium IDE中,有一个验证命令。当我将命令导出到 c# 中时,我发现 verify 基本上是 try catch 语句中的一个断言,并且错误被添加到字符串中。
在我的代码中,我想使用 verify 命令的功能,但我不想为每个断言使用 try 和 catch 语句。
有人有办法做到这一点吗?
编辑:
public static void AssertVerticalAlignment(CustomWebDriver webDriver, IElement elementA, IElement elementB, double tolerance = 0)
{
try
{
Assert.AreEqual(elementA.Location.X, elementB.Location.X, tolerance);
}
catch (Exception exception)
{
LogHelper.LogException(exception.Message, exception.StackTrace, webDriver.GetScreenshot());
throw;
}
}
我想做的是在断言中添加一条消息。它应该说nameOfElementA与nameOfElementB不一致。但我不想给元素 A 和元素 B 一个名称属性。
这就是我调用该方法的方式:AssertVerticalAlignment(webdriver, homepage.NameInput, homepage.AgeInput)
主页是一个对象,NameInput 是主页的一部分。NameInput 的类型是 IElement,它与 IWebElement 基本相同,但它不能与 html 交互,即。它没有点击等能力。
所以我希望消息说NameInput与AgeInput不一致
你本质上是在要求一种做"软断言"的方法。IDE 执行此操作的方式是正确的。毕竟,这就是"软断言"。如果某件事未能使某个特定断言失败,您希望它无论如何都能继续下去。这就是IDE正在做的事情,通过捕获该异常(请注意,在它的代码中,它只捕获AssertionException
)。
为了帮助避免混乱的代码,您能做的最好的事情就是创建自己的verify
方法。有时您甚至不需要捕获异常。例如,采用以下基本verifyElementIsPresent
方法:
private class SoftVerifier
{
private StringBuilder verificationErrors;
public SoftVerifier()
{
verificationErrors = new StringBuilder();
}
public void VerifyElementIsPresent(IWebElement element)
{
try
{
Assert.IsTrue(element.Displayed);
}
catch (AssertionException)
{
verificationErrors.Append("Element was not displayed");
}
}
}
你为什么需要exception
?
private class SoftVerifier
{
private StringBuilder verificationErrors;
public SoftVerifier()
{
verificationErrors = new StringBuilder();
}
public void VerifyElementIsPresent(IWebElement element)
{
if (!element.Displayed)
{
verificationErrors.Append("Element was not displayed");
}
}
}
排序答案是有一些方法可以让它不那么混乱,但总的来说,不,你对此无能为力。