是否有可能捕获多个异常?
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]);
您可以多次调用此验证方法。
我有一个类似于下面的代码:
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]);
您可以多次调用此验证方法。