是否有可能捕获多个异常?

Is it possible for a catch to get several exceptions?

我有一个类似于下面的代码:

           try { 

                SelectElement selectSize = new SelectElement(picProfileBtn);
                IList<IWebElement> optionsProfile = selectSize.Options;

                IWebElement firstProfile = optionsProfile[0];
                Assert.AreEqual("S", firstProfile.Text);
                IWebElement secondProfile = optionsProfile[1];
                Assert.AreEqual("M", secondProfile.Text);
                IWebElement thirdProfile = optionsProfile[2];
                Assert.AreEqual("L", thirdProfile.Text);
                IWebElement fourthProfile = optionsProfile[3];
                Assert.AreEqual("Test", fourthProfile.Text);
                
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

如果第一个断言失败,有没有办法继续测试到最后?如果任何其他断言失败,或发生任何其他异常,它都在同一个堆栈跟踪消息下?

我现在所拥有的,如果一个断言失败,则测试存在并且我得到带有堆栈跟踪的消息。

您可以像这样将每个断言放入它自己的 try/catch 块中。

       try { 

            SelectElement selectSize = new SelectElement(picProfileBtn);
            IList<IWebElement> optionsProfile = selectSize.Options;

            IWebElement firstProfile = optionsProfile[0];
            Assert.AreEqual("S", firstProfile.Text);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        try {
            IWebElement secondProfile = optionsProfile[1];
            Assert.AreEqual("M", secondProfile.Text);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        try {
            IWebElement thirdProfile = optionsProfile[2];
            Assert.AreEqual("L", thirdProfile.Text);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        try {
            IWebElement fourthProfile = optionsProfile[3];
            Assert.AreEqual("Test", fourthProfile.Text);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

像这样使用 for 循环

           string[] profiles = { "S", "M", "L", "Test" };
            try
            {
                SelectElement selectSize = new SelectElement(picProfileBtn);
                IList<IWebElement> optionsProfile = selectSize.Options;
                for(int i = 0; i < profiles.Length; i++)
                {
                    IWebElement firstProfile = optionsProfile[i];
                    Assert.AreEqual(profiles[i], firstProfile.Text);
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }

            }

你的问题不是很清楚,所以我试着给它一个解释。

这是我的建议,希望是你需要的:

try { 
    SelectElement selectSize = new SelectElement(picProfileBtn);
    IList<IWebElement> optionsProfile = selectSize.Options;

    try {
        IWebElement firstProfile = optionsProfile[0];
        Assert.AreEqual("S", firstProfile.Text);
    } catch(AssertFailedException e) {
        Console.WriteLine("Test 1 failed: " + ex.Message);
    }

    try {
        IWebElement secondProfile = optionsProfile[1];
        Assert.AreEqual("M", secondProfile.Text);
    } catch(AssertFailedException e) {
        Console.WriteLine("Test 2 failed: " + ex.Message);
    }

    try {
        IWebElement thirdProfile = optionsProfile[2];
        Assert.AreEqual("L", thirdProfile.Text);
    } catch(AssertFailedException e) {
        Console.WriteLine("Test 3 failed: " + ex.Message);
    }

    try {
        IWebElement fourthProfile = optionsProfile[3];
        Assert.AreEqual("Test", fourthProfile.Text);
    } catch(AssertFailedException e) {
        Console.WriteLine("Test 4 failed: " + ex.Message);
    }
} catch (Exception ex) {
    Console.WriteLine("Unhandled exception: " + ex.Message);
}

这就是try catch的概念,你应该只写可能导致try catch失败的代码。

public void validate(string actual, string expected) {
try {
     Assert.AreEqual(actual, expected); }
catch (Exception ex){
     Console.WriteLine(ex.Message);
    }
}

并像这样调用此方法进行所有验证:

 validate("S", optionsProfile[0]);

您可以多次调用此验证方法。