我正在尝试使用c#学习Selenium Webdriver的自动化。我有自定义方法Assert
。在捕获AssertFailedException
之后我继续进行测试的方法是使用下面的try-catch
是我的代码
public static void assert(string value, IWebElement element)
{
try
{
Assert.AreEqual(value, element.Text);
}
catch (AssertFailedException e)
{
Console.WriteLine(e.Message.ToString());
}
}
我的问题是它捕获了所有AssertFailedException
(这是我的目标),但测试结果在视觉工作室中被通过。我的问题是,如果控制台包含异常,如何实现继续失败并失败测试。先谢谢你们!
答案 0 :(得分:0)
您可以尝试使用verify而不是assert进行次要检查。默认情况下断言表示主要检查点和脚本执行将在失败时终止,如果捕获该异常,则将忽略报告 - 这是预期的行为。但是,验证表明脚本即使在失败时也可以继续 - 在这种情况下,将报告失败的步骤并继续脚本。
简单地说,当您不希望脚本在失败时继续运行时使用assert,并在您希望脚本报告失败并继续时使用验证。
答案 1 :(得分:0)
据我了解,您希望在测试中进行多次检查,并在其最后确定是否有任何失败。您可能需要编写一些自定义代码来实现此目的。例如,您可以引入课程Assertion
:
internal class Assertion
{
private readonly string title;
private readonly object expected;
private readonly object actual;
public Assertion(string title, object expected, object actual)
{
this.title = title;
this.expected = expected;
this.actual = actual;
}
public bool IsMatch()
{
return this.actual == this.expected;
}
public override string ToString()
{
return $"Title: {title}. Expected: {expected}. Actual: {actual}";
}
}
当您的测试运行时,您将创建Assertion
类的新实例并将它们存储在列表中。在测试结束时,您可以使用以下方法:
private static void VerifyAssertions(Assertion[] assertions)
{
var failedAssertions = assertions.Where(a => !a.IsMatch()).ToArray();
if (failedAssertions.Any())
{
throw new AssertFailedException(string.Join<Assertion>("; ", failedAssertions));
}
}