C# 编码ui测试失败后的操作

C# 编码ui测试失败后的操作,c#,automated-tests,coded-ui-tests,C#,Automated Tests,Coded Ui Tests,我在日常运行中使用多个c#Ordered测试。每个测试都需要恢复到快照,以便丢失所有数据和更改(这对我来说没问题) 但是。。。有时测试失败,所有信息丢失。Visual studio提供了很好的解释和屏幕截图(非常有用) 我的问题:是否有一种方法或功能可以实现,如果测试失败,一些文件(日志/崩溃)会复制到网络位置(硬编码功能或指向bat/脚本文件的链接或播放功能中的某些内容) 我在测试中尝试过使用try-catch选项,但会丢失从VisualStudio获得的良好信息。如果没有办法做到这一点,我将

我在日常运行中使用多个c#Ordered测试。每个测试都需要恢复到快照,以便丢失所有数据和更改(这对我来说没问题)

但是。。。有时测试失败,所有信息丢失。Visual studio提供了很好的解释和屏幕截图(非常有用)

我的问题:是否有一种方法或功能可以实现,如果测试失败,一些文件(日志/崩溃)会复制到网络位置(硬编码功能或指向bat/脚本文件的链接或播放功能中的某些内容) 我在测试中尝试过使用try-catch选项,但会丢失从VisualStudio获得的良好信息。如果没有办法做到这一点,我将回到尝试捕捉

问候

根据要求,一些代码:

这是我使用的一种测试方法:

//playback options + delay
Logging.playback();
Try{
Mouse.Click(uITaskListItems);
foreach (WinControl TaskList in uITaskListItems.GetChildren())
{
 if (TaskList.Name.Contains(Variables.TaskItem1))
 {
   Mouse.Click(TaskList, MouseButtons.Right);
   Mouse.Click(uIListMonitor);
   break;
  }
 }
}catch(Exception ex){
Logging.Log(ex.Message);
Assert.Fail();
和播放选项

private static void Playback_PlaybackError(object sender, PlaybackErrorEventArgs e)
{
   // Wait a second
   System.Threading.Thread.Sleep(1000);
   // Retry the failed test operation
   e.Result = PlaybackErrorOptions.Retry;
 }
 //playback options
 public static void playback()
 {
   Playback.PlaybackSettings.MatchExactHierarchy = true;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.Control;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.TopLevelWindow;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.None;
   Playback.PlaybackSettings.SearchTimeout = 2000;
   Playback.PlaybackSettings.ShouldSearchFailFast = true;
   Playback.PlaybackSettings.ThinkTimeMultiplier = 2;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.UIThreadOnly;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.Disabled;
   Playback.PlaybackSettings.WaitForReadyTimeout = 2000;
   Playback.PlaybackError -= Playback_PlaybackError;
   Playback.PlaybackError += Playback_PlaybackError;
   Playback.PlaybackSettings.DelayBetweenActions = 300;
  }
你可以试试这门课

使用Exception类可以获得错误的所有信息-“就像visual studio所做的那样”


您可以使用将在每次测试后执行的
[TestCleanup]
方法。代码可能基于以下内容

[TestCleanup()]
public void MyTestCleanup()
{
    switch (TestContext.CurrentTestOutcome)
    {
        case UnitTestOutcome.Passed:
            // Success.
            break;

        case UnitTestOutcome.Aborted:
        case UnitTestOutcome.Error:
        case UnitTestOutcome.Failed:
        case UnitTestOutcome.Inconclusive:
        case UnitTestOutcome.InProgress:
        case UnitTestOutcome.Timeout:
        case UnitTestOutcome.Unknown:
            // Oh dear.
            break;

        default:
            // Should never be called.
            break;
    }
}
更简单的例程可能只使用一个
if
语句:

    if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed )
    {
        // Oh dear.
    }

你能给我们看看你的一些代码吗?我不确定添加代码是否有用。这是我使用鼠标的一种测试方法;foreach(uITaskListItems.GetChildren()中的WinControl任务列表){if(TaskList.Name.Contains(Variables.TaskItem1)){Mouse.Click(TaskList,MouseButtons.Right);Mouse.Click(uIListMonitor);break;}}抱歉,我指的是
尝试
语句a。我知道一些关于ex输出的函数,但是你给我指出了一些额外的东西。因此,yeah将使用try-catch选项,除非另有规定。Thx对于帮助,您甚至可以捕获不同的异常以提供不同的功能。例如,如果断言失败,则将其记录为正常失败的测试用例,同样,如果找不到控件,则在发生异常时捕获特定操作集的UITestControlNotFound异常(可能为日志或其他内容保存页面的屏幕截图).我在测试清理中使用了if语句,它按照我希望的方式工作。这个答案在这种情况下是有用的,即使我学到了并且在某些情况下也在使用另一个答案。谢谢
    if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed )
    {
        // Oh dear.
    }