使用 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不一致

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

你本质上是在要求一种做"软断言"的方法。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");
        }
    }
}

排序答案是有一些方法可以让它不那么混乱,但总的来说,不,你对此无能为力。