Selenium C#继续失败

时间:2016-09-27 08:57:37

标签: c# selenium-webdriver

我正在尝试使用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(这是我的目标),但测试结果在视觉工作室中被通过。我的问题是,如果控制台包含异常,如何实现继续失败并失败测试。先谢谢你们!

2 个答案:

答案 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));
        }
    }