Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当有';什么是断言例外?(Xamarin.UITest,C#)_C#_Assertion_Xamarin.uitest - Fatal编程技术网

当有';什么是断言例外?(Xamarin.UITest,C#)

当有';什么是断言例外?(Xamarin.UITest,C#),c#,assertion,xamarin.uitest,C#,Assertion,Xamarin.uitest,我已经构建了一个Xamarin.UITest套件,并且正在真正的Android设备上进行本地测试。我注意到有一两次测试失败,但不一定是相同的测试。每当我试图重新运行这些测试,看看它们为什么会失败,它们都会通过!因此,我需要添加功能,以便在测试失败时查看屏幕上显示的内容。我似乎找不到专门针对这一点的指南——只是一些零碎的东西 我已经在StartApp()调用中添加了EnableLocalScreenshots(),但我不确定接下来的步骤。所以我有一些问题: 我是否需要指定屏幕截图的保存位置,还是自

我已经构建了一个Xamarin.UITest套件,并且正在真正的Android设备上进行本地测试。我注意到有一两次测试失败,但不一定是相同的测试。每当我试图重新运行这些测试,看看它们为什么会失败,它们都会通过!因此,我需要添加功能,以便在测试失败时查看屏幕上显示的内容。我似乎找不到专门针对这一点的指南——只是一些零碎的东西

我已经在StartApp()调用中添加了EnableLocalScreenshots(),但我不确定接下来的步骤。所以我有一些问题:

  • 我是否需要指定屏幕截图的保存位置,还是自动完成

  • 当出现AssertionException时,我是否需要显式编写代码来截图,或者截图功能默认就是这样做的

  • 如果我需要编写代码在出现断言异常时拍摄屏幕截图,请您给我举一个代码示例,以便我可以将其添加到我的套件中

  • 多谢各位

    编辑:Re:

    我在Hooks.cs文件中尝试了以下操作:

    [OneTimeTearDown]
    public void OneTimeTearDown()
    {
        if (TestContext.CurrentContext.Result.Outcome == ResultState.Error || TestContext.CurrentContext.Result.Outcome == ResultState.Failure)
        {
            App.Screenshot(TestContext.CurrentContext.Test.Name);
        }
    }
    
    调试这个方法后,我发现它从未被调用过。即使我使用了“拆卸”和“赛后”属性也不行。太棒了-智能感知喜欢我的代码,不好-因为它从未被调用过。不应该这么难

    我在这个套件中使用Specflow,这可能与我为什么会遇到这个问题有关吗?这就是为什么我不能在上面的线程上实现解决方案,因为Specflow管理NUnit测试

    UITest(() =>
    {
        // Do your test steps here, including asserts etc.
        // Any exceptions will be caught by the base class
        // and screenshots will be taken
    });
    

    对我来说,这就是答案

    在类上方添加了[Binding]属性(我的部分出现了哑错误)

    在我的截图方法上方添加了[AfterScenario()],并使其成为静态方法

    [AfterScenario()]
    public static void TakeScreenshot()
    
    指定了保存屏幕截图的位置

    App.Screenshot(TestContext.CurrentContext.Test.Name).CopyTo(@"C:\Users\me\Desktop\" + TestContext.CurrentContext.Test.Name + ".png");
    
    所以我猜是App.Screenshot(字符串标题)只是简单地获取一个屏幕截图并保存在内存中,但实际上您需要将它显式地保存在某个位置以获取它,而不是假设它只保存到默认位置


    就这样

    可能的副本发现,实际上,一个屏幕截图也被保存到C:\Users\me\AppData\Local\Temp,这是需要注意的。请使用.MoveTo而不是.CopyTo
    App.Screenshot(TestContext.CurrentContext.Test.Name).CopyTo(@"C:\Users\me\Desktop\" + TestContext.CurrentContext.Test.Name + ".png");