【问题标题】:How to programmatically click a TextBlock?如何以编程方式单击 TextBlock?
【发布时间】:2021-01-08 10:06:51
【问题描述】:

我有一个TextBlockMouseDown 活动:

tb.MouseDown += (s, e) => {
  ToSp.Children.Add(CreateTbAlp((s as TextBlock).Text, ToSp));
  CheckAnswer();
};

在单元测试中我需要对其进行测试。我试过了:

TextBlockAutomationPeer peer = new TextBlockAutomationPeer(tb);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();

但在这种情况下,我得到了错误

System.NullReferenceException

这个也一样

typeof (TextBlock)
  .GetMethod("MouseDown", BindingFlags.Instance | BindingFlags.NonPublic)
  .Invoke(tb, new object[0]);

还有其他方法可以通过编程方式点击TextBlock 吗?

【问题讨论】:

  • WPF 和 MVVM 设计模式的全部目的是不必做这种不敬虔的黑客行为。您确定这就是您想要构建应用程序的方式并且这就是您想要测试它的方式吗?
  • 或者,用不同的词问同样的问题:您为什么决定使用 Microsoft UI 自动化 API?

标签: c# wpf unit-testing


【解决方案1】:
TextBlock.RaiseEvent(new RoutedEventArgs(TextBlock.MouseDown));

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 2015-02-09
    • 1970-01-01
    • 2015-07-04
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多