有AssertionException时如何截屏? (Xamarin.UITest,C#)

时间:2019-09-11 09:38:25

标签: c# assertion xamarin.uitest

我已经构建了Xamarin.UITest套件,并且正在实际的Android设备上进行本地测试。我注意到一个或两个测试失败,但不一定是相同的测试。每当我尝试重新运行此类测试以查看其失败原因时,它们就会通过!因此,我需要添加功能以查看测试失败时屏幕上的内容。我似乎无法找到专门针对此的指南-点点滴滴...

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

  1. 我需要指定屏幕快照的保存位置,还是自动完成?

  2. 在出现AssertionException时我是否需要显式编写代码以截取屏幕截图,或者这是屏幕截图功能默认情况下的功能吗?

  3. 如果在出现AssertionException时需要编写代码以截取屏幕截图,请问能否为我提供一个示例代码,以便将其添加到我的套件中?

谢谢

编辑:回复:Take screenshot on test failure + exceptions

我在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);
    }
}

调试此方法后,我发现它从未被调用过。即使我使用TearDown和AfterScenario属性也不行。非常好-Intellisense很喜欢我的代码-很糟糕-因为它从未被调用。应该不难!

我在此套件中使用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
});

1 个答案:

答案 0 :(得分:1)

好的,对我来说,这就是答案。

在类上方添加了[Binding]属性(我这是愚蠢的错误)...

[Binding]
    class TestInitialise : BasePage

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

[AfterScenario()]
public static void TakeScreenshot()

指定屏幕快照的保存位置...

App.Screenshot(TestContext.CurrentContext.Test.Name).CopyTo(@"C:\Users\me\Desktop\" + TestContext.CurrentContext.Test.Name + ".png");

所以我猜App.Screenshot(string title)只是获取一个屏幕截图并将其保存在内存中,但是实际上您需要将其明确地保存在某个地方以获取它,而不是假设它只是保存到默认位置。 / p>

就是这样!