我必须处理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.Fail
删除catch
,测试将通过!这是奇怪的(即使之前的断言导致进入catch语句)。另一方面,如果我将assert.fail
保留在catch语句中,则测试将失败,但屏幕捕获不正确(屏幕捕获将由assert.fail
进行,但不是之前的那些)。
所以我的第一个问题是如何使用多个断言,如果其中一个失败,请以正确方式关闭测试并将测试标记为失败?
我的第二个问题是,是否可以使用assert进行逻辑运算?让我们假设我们的条件可以是A或B(取决于或运行时的情况)。现在我该怎样检查断言条件?如果条件是A或B,它应该只通过测试。在所有其他情况下,测试应该失败。
由于
答案 0 :(得分: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
为失败的测试制作这些文件的副本。