我有两个主要问题,都取决于DPI设置:
- 如何使用编码UI测试测试不同的DPI设置?
- 我怎么能检查我所有的窗体,对话框在我的项目,如果有的话控件是可见的(即不截断)
我们的项目是96 DPI编写的。在Windows中,DPI有三种设置:
- 更小- 100% = 96 DPI
- 中- 125% = 120 DPI
- 较大- 150% = 144dpi
编码UI测试是否适合如此复杂的任务?或者你有什么建议吗?
如果你需要进一步的信息,我很乐意回答。我不认为任何代码是需要的,因为它只是一个普通的winforms应用程序,我正在寻找一种方法来覆盖任何winform应用程序编码UI用于测试应用程序的功能。不是为了测试外观。所以一般编码UI不适合检查屏幕颜色、字体或文本中的换行符。然而,Coded UI确实提供了一个CaptureImage()
方法,所以在测试的任何时候,你都可以编写这样的代码:
Image img = UITestControl.Desktop.CaptureImage();
Image img = this.UIMap.UIYourApplicationsWindow.CaptureImage();
Image img = this.UIMap.UIYourApplicationsWindow.UISubWindow.UISubSub.CaptureImage();
... followed by:
img.Save( ... filename ... );
TextContext.AddResultFile(... filename ... )
我已经使用了CaptureImage()
方法,但没有实验是否进行屏幕捕获或是否使用底层图像文件。
也有一个MSDN博客可能会有所帮助。见http://blogs.msdn.com/b/gautamg/archive/2010/04/08/how-to-do-image-comparison-in-coded-ui-test.aspx
如果所有控件在不同的DPI设置中都是可见的(窗体,对话框),那么我认为没有任何问题。您需要在所有表单、按钮和对话框(任何控件)上记录断言,以验证"存在",而仅在一个DPI上说100%,然后在所有其他DPI设置上重复测试执行。请试一试,并让我们知道结果。
-Prasant
这里我找到并调整了一小段代码片段。它是用c#编写的。
在此代码中,我们将两个Image对象转换为Base64 String
。通过对比Base64 string
,我们可以知道图像是否相同。代码如下:
public static bool ImageCompareString(Image firstImage, Image secondImage)
{
var ms = new MemoryStream();
firstImage.Save(ms, ImageFormat.Png);
String firstBitmap = Convert.ToBase64String(ms.ToArray());
ms.Position = 0;
secondImage.Save(ms, ImageFormat.Png);
String secondBitmap = Convert.ToBase64String(ms.ToArray());
if (firstBitmap.Equals(secondBitmap))
{
return true;
}
else
{
return false;
}
}