在使用NUnit的硒测试中使用验证

时间:2013-10-29 15:59:04

标签: c# selenium nunit selenium-webdriver

在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不对齐。但我不想给elementA和elementB赋予名称属性。

这就是我调用方法的方式:AssertVerticalAlignment(webdriver, homepage.NameInput, homepage.AgeInput) Homepage是一个对象,NameInput是Homepage的一部分。 NameInput的类型为IElement,与IWebElement基本相同,但它不能与html交互,即。它无法点击等等。

所以我希望消息说NameInput与AgeInput

不对齐

1 个答案:

答案 0 :(得分:1)

你本质上是在想办法做“软断言”。 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");
        }
    }
}

排序答案是,有一些方法可以让它变得不那么混乱,但总的来说,不,你可以做的事情并不多。