【发布时间】:2021-05-31 07:37:30
【问题描述】:
我想告诉自己有关编码 UI 测试的信息。所以我创建了一些编码的 ui 测试并玩了一下。
但现在我到了无法自拔的地步。我有以下问题。当我确实从 dotNet 4.5 程序中记录一些动作时,记录器会通过 SearchProperties[WinText.PropertyNames.Name] 定位表单、按钮、文本字段等,这绝对不酷。
假设您想对文本控件进行断言。 WinText.PropertyNames.Name 将是计算值。因此,如果您更改表单中影响计算的某些输入值,WinText.PropertyNames.Name 将更改为新值,并且编码的 ui 测试将找不到具有更改值的文本控件,因为它搜索了 WinText。控件的 PropertyNames.Name 而不是 WinText.PropertyNames.ControlName。
我的问题是,有没有办法更改编码的 ui 测试构建器用来定位所需对象的标准搜索属性的配置?
因为之后要为每个记录的对象更改此设置需要付出很大的努力。
PS:我说的不是C:\Program Files (x86)\Common Files\microsoft shared\VSTT\11.0\IEPropertyConfiguration.xml,它只对ie站点有效=)
补充:
让我们把事情说清楚:
这是我的代码:
public class UIItem100180Window : WinWindow
{
public UIItem100180Window(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{
#region Search Criteria
this.SearchProperties[WinWindow.PropertyNames.ControlName] = "wert2Praemie12";
this.WindowTitles.Add("Any Title");
#endregion
}
#region Properties
public WinText UIItem100180Text
{
get
{
if ((this.mUIItem100180Text == null))
{
this.mUIItem100180Text = new WinText(this);
#region Search Criteria
this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.Name] = "1.001,80";
this.mUIItem100180Text.WindowTitles.Add("Any Title");
#endregion
}
return this.mUIItem100180Text;
}
}
#endregion
#region Fields
private WinText mUIItem100180Text;
#endregion
}
我有一个 父控件(UIItem100180Window: WinWindow),它在 UI 上创建了我的 Text-Control(UIITem100180Text: WinText),它代表了我的计算值。问题是两者都有相同的 .PropertyNames.ControlName =)。
这意味着如果我要添加:
this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.ControlName] = "wert2Praemie12";
它会一直找到我的父控件:WinWindow。如果我没有添加它并且计算的值发生变化(可能计算方法被编辑,..),它不等于 this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.Name] = "1.001, 80";找不到控件,会抛出errorMessage "..control not found"。
稍后我会在这一行遇到问题,检查我的文本控件(WinText)的值:
public void VerifyTextControl()
{
#region Variable Declarations
WinText uIItem100180Text = this.xxx.UIItem100180Window.UIItem100180Text;
#endregion
// Verify that the 'DisplayText' property of '1.001,80' label equals '1.001,80'
Assert.AreEqual("1.001,80", uIItem100180Text.DisplayText, "järhlich muss 1.001,80 € betragen!");
}
我的 uIItem100180Text:WinText 被处理为 WinWindow 因为当我搜索 PropertyNames.ControlName 时它只找到我的父控件,就像我说的一样一样的名字。所以我无法使用 .DisplayText 方法,它以错误消息结尾。
最好的解决方案是,在父控件上进行断言,因为它还保留了文本控件的值,你不会像我一样遇到这样的问题。
也许这篇文章对在同一点上挣扎的人有所帮助。
注意:
UITestControl->WinControl->WinText
UITestControl->WinControl->WinWindow
【问题讨论】:
-
我不知道你是怎么做到的,但这篇文章看起来很有趣:msdn.microsoft.com/en-us/library/gg269469.aspx
-
您能否举一个您认为“不酷”的代码示例,并说明您可能需要更改它的原因和方式?通常,如果正在测试的应用程序发生更改,那么测试也需要更改以匹配。否则更改不是真正的更改或测试不充分。
-
谢谢乔克,我之前已经读过这篇文章了(:
-
@AdrianHHH 问题是,如果您想检查值并且程序中的值以某种方式更改(例如更改为 2.000,98),它每次都会抛出“找不到控件异常”而不是“assertfailedException” ”。那是我的问题。它的逻辑是因为控件位于代码行:this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.Name] = "1.001,80";因此,如果值发生变化并且这让我很生气,它将不会被发现。
-
我已在以下链接回复:stackoverflow.com/a/36649658/2871356
标签: unit-testing visual-studio-2012 mstest coded-ui-tests