【发布时间】:2017-11-30 02:02:20
【问题描述】:
我正在尝试构建一个测试用例,在其中检索数据对象列表并将其填充到数据网格中。
我想验证(断言)第一行有一个以“ABC”开头的字段/列。
我可以看到生成的代码生成的元素基本上具有该字段的确切显示值(在本例中为“ABCDEFG”)。
当然,当我运行这个测试时,它验证得很好,因为生成的元素(“ABCDEFG”)肯定以“ABC”开头。
问题是数据网格可以填充动态数据,因此字段显示可能类似于“ABC-FOO”甚至“XYZ”。
简而言之,生成的自动代码似乎不像我预期的那样运行。
我期望针对实时字段显示执行 StartsWith 断言,而不是我用来构建测试的生成(硬编码)字符串。
我在这里做错了吗? 我错过了一些关键的东西吗? 还是我应该完全放弃 Coded UI?
这是生成的元素:
public HtmlLabel generatedLabel
{
get
{
if ((this.mUIgeneratedLabelLabel == null))
{
this.mUIgeneratedLabelLabel = new HtmlLabel(this);
#region Search Criteria
this.mUIgeneratedLabelLabel.SearchProperties[HtmlLabel.PropertyNames.Id] = "Control_42";
this.mUIgeneratedLabelLabel.SearchProperties[HtmlLabel.PropertyNames.Name] = null;
this.mUIgeneratedLabelLabel.SearchProperties[HtmlLabel.PropertyNames.LabelFor] = null;
this.mUIgeneratedLabelLabel.SearchProperties[HtmlLabel.PropertyNames.InnerText] = "ABCDEF-FOO";
this.mUIgeneratedLabelLabel.FilterProperties[HtmlLabel.PropertyNames.Class] = "field-control";
this.mUIgeneratedLabelLabel.FilterProperties[HtmlLabel.PropertyNames.ControlDefinition] = "class=\"field-control\" id=\"ControlB";
this.mUIgeneratedLabelLabel.FilterProperties[HtmlLabel.PropertyNames.TagInstance] = "24";
this.mUIgeneratedLabelLabel.WindowTitles.Add("MyTest");
#endregion
}
return this.mUgeneratedLabelLabel;
}
}
----更新----
解释我的困惑是什么:我已经在一些动态检索的文本(“ABCD”)上设置了我的 StartsWith() 断言。我创建了断言来检查文本是否 StartsWith "ABC"。现在,当我查看生成的断言代码时,我看到断言将始终通过,因为代码将文本的字符串文字(“ABCD”)与断言检查字符串文字(“ABC”)进行比较。我正在寻找的是对测试运行期间检索到的任何动态文本进行断言检查。希望这能说明我卡在哪里了。
【问题讨论】:
-
我不明白这个问题。您是否在问为什么您显示的代码包含
... InnerText] = "ABCDEF-FOO";行以及如何处理它?如果是,那么为什么不从搜索属性中删除该条目。另见stackoverflow.com/a/19703241/546871 -
附加了详细说明,希望能澄清我的困惑和问题所在。
-
请edit该问题显示断言代码。
-
您的问题是需要在运行时查找变量进行比较,还是比较不正常?
-
问题在于生成的代码本质上是对要比较的字符串进行硬编码(没有一个字符串是动态的)。如果我查看生成的代码,我可以从字面上看到硬编码的字符串(“ABC”与“ABCD”)。我需要的是能够根据运行时确定的字符串值检查字符串“ABC”。
标签: visual-studio automated-tests coded-ui-tests