WPF-кодированный тест пользовательского интерфейса не вызывает изменения свойства привязки - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть представление 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));
    }
}

Теперь, когда я нажимаю этот переключатель в приложении, он корректно вызывает установщик свойств и устанавливает значение.

Проблема в том, что он не работает, когда я пытаюсь сделать то же самое из кодированного теста пользовательского интерфейса:

// 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, и она не срабатывает, когда она срабатывает при запуске вне сценария тестирования пользовательского интерфейса и щелкается вручную.

Что-то мне не хватает?
Как заставить RadioButton вызвать изменение Binding в сценарии автоматического тестирования пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Кодированные тесты пользовательского интерфейса выполняются не так, как тестируемое приложение.Итак, убедитесь, что ваш отладчик действительно подключен к правильному процессу.Вы не достигнете никаких точек останова в коде приложения, если не подключите отладчик к этому процессу.

Чтобы сделать это в Visual Studio 2017, перейдите к Debug> Attach To Process... и выберите процесстестируемое приложение.

0 голосов
/ 22 февраля 2019

Вместо установки значения true / false попробуйте выполнить SendKeys с помощью клавиши {SPACE}.Если пробел не работает, попробуйте {ENTER}.Я надеюсь, что это поможет вам.

if(!alternativeOptionRadioButton.Selected)
{
    Keyboard.SendKeys(alternativeOptionRadioButton, "{SPACE}");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...