0

我必须在 HTML 页面上工作并验证结果(添加一些文本,从组合框中选择一些项目,单击某个按钮)。

例如 action1、action2 和 action3。

在每个动作之后,我需要验证前一个动作的结果。在 QTP 中,我们将使用 Report.Fail(通过,警告)并转到下一个操作。

在代码 UI 中,我使用的是类似的东西

try{
  Action1;
  Assert //some kind of assert
  Action2;
  Assert //some kind of assert
  Action3;
  Assert //some kind of assert
}
Catch (exception ex)
{
  ...
  Assert.Fail()
}

这在某种程度上有效,但并不完美。问题是,如果我删除Assert.Failfrom catch,测试将通过!这很奇怪(甚至之前的断言也导致进入 catch 语句)。另一方面,如果我保留assert.fail在 catch 语句中,测试将失败,但屏幕截图不是正确的(屏幕截图将被拍摄assert.fail但不是以前的)。

所以我的第一个问题是如何使用多个断言,如果其中一个失败,以正确的方式关闭测试并将测试标记为失败?

我的第二个问题是,是否可以使用断言进行逻辑运算?让我们假设我们有一个条件可以是 A 或 B(取决于或运行时情况)。现在我应该如何检查断言条件?如果条件是 A 或 B,它应该只通过测试。在所有其他情况下,测试应该失败。

谢谢

4

1 回答 1

1

Coded UI 框架代码调用具有 [TestMethod] 属性的方法。在测试方法内部调用一个断言来报告测试失败,Assert抛出一个框架捕获的异常。该框架在捕获异常后保存图像。如果您的代码捕获到异常,则故障不会传递给框架。如果您的代码在测试中从不同的断言中捕获了多个异常,那么框架将不会看到这些异常。因此,您看到的行为。

编码 UI 通常基于在失败的第一个条件(即第一个断言)处停止测试的基础上工作。如果您想要一个测试来检查多个项目并报告所有失败的项目,那么您需要自己编写代码。通常,您将断言调用更改为简单if测试,如果测试失败记录原因,然后在测试结束时检查是否有任何测试失败。如果他们这样做了,则调用Assert.Fail并传递失败原因的摘要。

要从故障点获取屏幕图像,您可以混合使用以下类型的语句:

Image img1 = UITestControl.Desktop.CaptureImage();
Image img2 = this.UIMap.UIYourApplicationsWindow.CaptureImage();
Image img3 = this.UIMap.UIYourApplicationsWindow.UISubWindow.UISubSub.CaptureImage();
... followed by:
imgX.Save( ... filename ... ); // For various X
TextContext.AddResultFile(... filename ... ) 

这些img.Save调用将为每个调用创建一个文件,包括来自通过的测试的调用。AddResultFile为失败的测试制作这些文件的副本。

于 2013-07-30T21:37:05.140 回答