编码的UI测试复选框控件变为隐藏,在使用VS2015

时间:2016-11-08 15:26:20

标签: asp.net visual-studio checkbox automated-tests coded-ui-tests

行为: 我使用Visual Studio 2015企业编码UI测试生成器在Microsoft Internet Explorer上记录了Web应用程序测试。 测试回放但是当他们检查Web UI上的任何其中一个复选框时,它们总是失败并出现异常。也就是说,它对所有复选框都失败了。

对复选框控件执行操作时引发的异常:

Cannot perform 'SetProperty of Checked with value "True"' on the hidden control

Visual Studio 2015为此控件生成的代码是:

// Select 'Enable payment cancellation.' check box
uIEnablepaymentcancellCheckBox1.Checked = this.NewOpAgreeTempTestParams.UIEnablepaymentcancellCheckBox1Checked;

我已经检查了许多关于类似声音问题的其他讨论,但是我从未发现任何与此具有完全相同行为的问题。

具体有什么不同:当尝试从编码的UI测试编辑器(或在测试代码中使用mycheckboxcontrol.DrawHighlight()方法)找到控件时,它从不突出显示位置的复选框它位于UI 中,而在文档的最左上角中绘制一个蓝色小矩形

在尝试获取一些相关信息时,我记录了一个简单的测试,该测试使用了我们的Web UI中的一个基本复选框控件,然后我将生成的代码移动到UIMap.cs并添加了一些我能想到的语句。 [请注意,我是编码UI测试的新手,所以我可能错过了一些好主意,但我从阅读有关此主题的讨论中得到了一些想法]。然后我在调试模式下运行测试并捕获输出以在此处共享。

以下是测试代码:

System.Diagnostics.Trace.WriteLine("Sanity check of the checkbox control-->");
System.Diagnostics.Trace.WriteLine("Friendly name=" + uIEnablepaymentcancellCheckBox1.FriendlyName);
System.Diagnostics.Trace.WriteLine("LabeledBy=" + uIEnablepaymentcancellCheckBox1.LabeledBy);
System.Diagnostics.Trace.WriteLine("ControlType=" + uIEnablepaymentcancellCheckBox1.ControlType);
System.Diagnostics.Trace.WriteLine("Id=" + uIEnablepaymentcancellCheckBox1.Id);
System.Diagnostics.Trace.WriteLine("Exists=" + uIEnablepaymentcancellCheckBox1.Exists);
System.Diagnostics.Trace.WriteLine("Count of matching controls=" + uIEnablepaymentcancellCheckBox1.FindMatchingControls().Count);
System.Diagnostics.Trace.WriteLine("Count of search properties=" + uIEnablepaymentcancellCheckBox1.SearchProperties.Count);
System.Diagnostics.Trace.WriteLine("Width=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Width);
System.Diagnostics.Trace.WriteLine("Height=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Height);
System.Diagnostics.Trace.WriteLine("X=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.X);
System.Diagnostics.Trace.WriteLine("Y=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Y);
System.Diagnostics.Trace.WriteLine("Value=" + uIEnablepaymentcancellCheckBox1.Value);
System.Diagnostics.Trace.WriteLine("Checked=" + uIEnablepaymentcancellCheckBox1.Checked);
System.Diagnostics.Trace.WriteLine("<--");

调试窗口中测试代码的结果输出:

    Sanity check of the checkbox control-->
    Friendly name=Enable payment cancellation.
    LabeledBy=Enable payment cancellation.
    ControlType=CheckBox
    Id=PaymentCancellation
    Exists=True
    Count of matching controls=1
    Count of search properties=4
    Width=0
    Height=0
    X=21
    Y=130
    Value=on
    Checked=False
    <--

从调试器中我注意到这些是相关的搜索属性:

ControlType EqualTo CheckBox
TagName EqualTo INPUT
Id EqualTo PaymentCancellation
Name EqualTo PaymentCancellation

上述测试代码需要注意的一些事项:

  • 当宽度(或高度)不是>时,控件被认为是隐藏控件。 0,但根据我读过的讨论,我期待隐藏控件的宽度= -1。
  • 代码找到的X,Y坐标显示Coded UI Tester认为控件位于文档的左上角,因此距离控件实际位于网页的位置非常远。
  • 它只找到一个控件

尝试了SetProperties的替代方案:
因为在一些讨论中有一个建议在一个隐藏的控件上使用Mouse.Click而不是SetProperties(忽略这不应该是一个隐藏的控件的事实)我试过这个但它失败了,但有类似的例外。

代码尝试:Mouse.Click(uIEnablepaymentcancellCheckBox1);

结果:Cannot perform 'Click' on the hidden control.

此外,以下代码还会在左上角而不是复选框控件本身上绘制高亮显示框:

uIEnablepaymentcancellCheckBox1.DrawHighlight();

摘要问题:为什么编码的UI测试构建器以这种方式为复选框创建测试的任何线索,以便我可以找到一种方法来阻止它们成为无法执行任何操作的隐藏控件?

[2016.11.24以下更新]

经过多次测试,并与其他人交谈后,我更仔细地检查了复选框控件,并意识到UI的原始作者已经对其进行了定制,使得它不再像普通复选框那样完全一样。普通的复选框控件很好。 此控件现在是一个名为“checkbox-container”的CSS类。复选框控件实际上是故意隐藏的,因为它不是仅仅选中或取消选中普通复选框,而是显示复选框的两个图像之一 - (大)空框的图像或复选框的图像。复选框 - 容器在选中时会添加一个名为“checked”的类。

这个自定义控件在屏幕上看起来不错,但它为编码的UI测试带来了问题。如果想要保持自定义控件的原样,则必须手动维护编码的UI测试代码,以与自定义控件保持其值的方式类似的方式工作(即,将添加或删除“已检查”类从复选框的标签控件而不是直接使用复选框。

1 个答案:

答案 0 :(得分:0)

经过多次测试,并与其他人交谈后,我更仔细地检查了复选框控件,并意识到UI的原始作者已经对其进行了定制,使得它不再像普通复选框那样完全一样。普通的复选框控件很好。此控件现在是一个名为&#34; checkbox-container&#34;的CSS类。复选框控件实际上是故意隐藏的,因为它不是仅仅选中或取消选中普通复选框,而是显示复选框的两个图像之一 - (大)空框的图像或复选框的图像。复选框 - 容器还会添加一个名为&#34; check&#34;检查时。

这个自定义控件在屏幕上看起来不错,但它为编码的UI测试带来了问题。如果想要保持自定义控件的原样,则必须手动维护编码的UI测试代码,以便以与自定义控件保持其值相似的方式工作(即&#34;已检查&#34;类将在复选框的标签控件中添加或删除,而不是直接使用复选框。