如何在将键盘键发送到 Outlook 消息 Window 期间避免编码 UI 中的 PlaybackFailureException?

How to avoid PlaybackFailureException in coded UI during sending keyboard keys to Outlook Message Window?

我正在尝试将键盘序列 ctrl+c 发送到 outlook 会议表单中的消息字段 (ControlType=Client;Name=Message) 并获取 PlaybackFailureException。

元素已成功找到,我可以向其发送任何文本,但不能发送键盘键。我尝试了两种方法:

1) 使用修饰符:

elements_object.SetFocus();
Keyboard.SendKeys("{A}", ModifierKeys.Control);
Keyboard.SendKeys("{C}", ModifierKeys.Control);

这样只需在字段中键入 A,然后键入 C。我期望的操作没有执行(选择 + 复制)

2) 无修饰符:

elements_object.SendKeys("{^a}");
elements_object.SendKeys("{^c}");

这种方式抛出异常 PlaybackFailureException 。

有趣的是:例如发送 {ENTER} 是有效的。

伙计们,我做错了什么?

如果要执行Ctrl+A,使用

Keyboard.SendKeys("^a");

要执行 Ctrl + C,

Keyboard.SendKeys("^c");

如果您想传递控制权,sendkeys 必须执行:

  Keyboard.SendKeys(UITestControl, "^c");

查看此处以了解有关 SendKeys 的更多信息:MSDN SendKeys

编辑

我试过下面的代码(可能很快但很脏),它对我有用:

 WinWindow outlook = new WinWindow();
        outlook.SearchProperties.Add(WinWindow.PropertyNames.Name, "Untitled - Meeting  ");
        WinClient doc = new WinClient(outlook);
        doc.SearchProperties.Add(WinWindow.PropertyNames.Name, "Document1");
        WinClient msg = new WinClient(doc);
        msg.SearchProperties.Add(WinWindow.PropertyNames.Name, "Message");

        Keyboard.SendKeys(msg, "^a");
        Keyboard.SendKeys(msg, "^c");
// I tried pasting it, it pastes same content whatever is copied.
        Keyboard.SendKeys(msg, "^v");

我不知道它到底是如何工作的,但也许它对将来的人有用。方法是单击此字段,然后所有快捷方式都可以正常工作。不点击是不行的。