我有一个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
,但是viewmodel setter没有被命中。我在_useAlternativeOption = value ?? false
线上设置了断点并且它没有被击中,而在UI测试场景之外运行并且手动点击时它被击中。
有什么我想念的吗? 如何使单选按钮在自动UI测试场景中触发其qazxsw poi的更改?
编码的UI测试在与被测应用程序不同的进程中运行。因此,请确保您的调试器实际上已附加到正确的进程。除非您还将调试器附加到该进程,否则不会在应用程序代码中遇到任何断点。
要在Visual Studio 2017中执行此操作,请转至Binding
> Debug
并选择要测试的应用程序的过程。
不要设置true / false值,而是尝试使用{SPACE}键执行SendKeys。如果空间不起作用,请尝试{ENTER}。我希望这能让你度过难关。
Attach To Process...