【发布时间】:2019-02-20 16:05:15
【问题描述】:
我有一个 WPF 视图并以编程方式在其上创建一个单选按钮:
// public class MyView
var radioButton = new RadioButton
{
Name = "NameGoesHere",
Content = "Use alternative option",
FontWeight = FontWeights.Bold,
IsChecked = false
};
radioButton.SetBinding(ToggleButton.IsCheckedProperty, new Binding("UseAlternativeOption")
{
Converter = new CustomNullableBoolConverter(),
ConverterParameter = true,
Mode = BindingMode.TwoWay
});
panel.Children.Add(radioButton);
这个单选按钮有一个双向绑定到我的视图模型中的一个属性:
// public class MyViewModel
public bool? UseAlternativeOption
{
get
{
return _useAlternativeOption;
}
set
{ // breakpoint here is not being hit when updated from automated UI test scenario
_useAlternativeOption = value ?? false;
OnPropertyChanged(nameof(UseAlternativeOption));
}
}
现在,当我在应用程序中单击此单选按钮时,它会正确调用属性设置器并设置值。
问题是当我尝试从编码的 UI 测试中做同样的事情时它不起作用:
// public class MyUnitTests
var alternativeOptionRadioButton = UIControlBuilder<WpfRadioButton>.Builder()
.Parent(ContentPane)
.AutomationID(AlternativeOptionRadioButtonAutomationID)
.Build();
alternativeOptionRadioButton.Selected = true;
Assert.AreEqual(true, viewModel.UseAlternativeOption);
我看到表单上的单选按钮被选中,并且可以看到Selected 属性是true,但是没有点击视图模型设置器。我在_useAlternativeOption = value ?? false 行上放了一个断点,它没有被命中,而在 UI 测试场景之外运行并手动单击时它被命中。
我有什么遗漏吗?
如何让 RadioButton 在自动化 UI 测试场景中触发其Binding 的变化?
【问题讨论】:
-
顺便说一下,
OnClick事件在用户交互和自动化 UI 测试场景中都会被触发,因此肯定会单击单选按钮。 -
您确定调试器连接到正确的进程吗?运行编码 UI 测试的进程可能与实际应用程序进程不同。如果您只是尝试调试编码的 UI 测试,则不会在实际应用程序中遇到任何断点,除非您还附加到该进程。
-
@DaveM 这很有意义。实际上,模型正在正确更新,但我只是没有意识到我实际上是在调试 UI 测试,而不是在测试中的应用程序。谢谢。您可以将其作为答案发布,以便它可以帮助其他偶然发现此问题的开发人员:)
标签: c# wpf testing coded-ui-tests