有谁能告诉我在Selenium / c#中处理失败测试的正确方法是什么?我有下面的代码,它工作正常并且应该失败,但Assert.Fail()结束运行并跳过任何后续测试。是否有一种方法可以使此specflow步骤和整个作业失败,但仍然执行后续步骤?
[Then(@"I click the data input box and say hello")]
public void ThenIClickTheDataInputBox()
{
try
{
Driver.Browser.FindElement(By.Id("lst-ibs")).SendKeys("Hello - This is a test!!");
}
catch(Exception e)
{
Console.WriteLine("Element 'lst-ib' not found on page");
Assert.Fail();
}
}
答案 0 :(得分:0)
假设您的意思是它停止执行后续的步骤而不是后续的测试。这是一个测试,包括SpecFlow测试,通常表现如下:每当在任何步骤中发生故障(异常)时,测试立即失败,并且下一个测试开始。 (如果需要,您还可以使用BeforeScenario
和AfterScenario
挂钩来初始化和清理测试之前和之后的事情。
请注意,与手动测试不同,您可以根据自己的判断来决定是否继续测试,但自动测试不能。
如果您仍希望步骤不会使测试失败,那么您不应该将Assert.Fail()
放在那里。您可以在上一个Then
或中打开一些旗帜
AfterScenario
检查该标志并且未通过测试。
Assert.Fail()
没有多大意义。如果你做想要在异常的情况下使步骤失败,你可以完全消除try
/ catch
条款并简单地让异常回流。在失败步骤方面,这将与您正在执行的操作具有相同的效果。此外,您的代码吞下了异常的所有细节(它的类型,消息,堆栈跟踪,内部异常等),这些在您调查失败时非常有用。在不捕获异常的情况下抛弃异常,保留所有这些信息并在测试资源管理器中或在您看到测试结果的任何位置向您显示。