Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将键盘键发送到Outlook消息窗口期间,如何避免编码UI中的PlaybackFailureException?_Outlook_Coded Ui Tests - Fatal编程技术网

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

在将键盘键发送到Outlook消息窗口期间,如何避免编码UI中的PlaybackFailureException?,outlook,coded-ui-tests,Outlook,Coded Ui Tests,我正在尝试将键盘序列ctrl+c发送到outlook会议表单中的消息字段(ControlType=Client;Name=message),并获取PlaybackFailureException 元素被发现是成功的,我可以在那里发送任何文本,但不能发送键盘键。我尝试了两种方法: 1) 使用修改器: elements_object.SetFocus(); Keyboard.SendKeys("{A}", ModifierKeys.Control); Keyboard.SendKeys("{C}",

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

元素被发现是成功的,我可以在那里发送任何文本,但不能发送键盘键。我尝试了两种方法:

1) 使用修改器:

elements_object.SetFocus();
Keyboard.SendKeys("{A}", ModifierKeys.Control);
Keyboard.SendKeys("{C}", ModifierKeys.Control);
elements_object.SendKeys("{^a}");
elements_object.SendKeys("{^c}");
这样只需在字段中键入A,然后键入C。预期的操作未执行(选择+复制)

2) 不带修改器:

elements_object.SetFocus();
Keyboard.SendKeys("{A}", ModifierKeys.Control);
Keyboard.SendKeys("{C}", ModifierKeys.Control);
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的更多信息:

编辑

我尝试了以下代码(可能是快速和肮脏的),它对我有效:

 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");

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

对不起。有一点误解。我说得不够具体。在我的例子中,我从对象调用的SendKeys()方法只是带有日志记录的包装器,当然在它里面我有通用的键盘。SendKeys(^c),所以在您回复后,我尝试了您的选项:1)
code
Keyboard.SendKeys(^a”);键盘。发送键(“^c”)
code
2)
code
Keyboard.SendKeys(GetControl(),“^a”);键盘。发送键(GetControl(),“^c”)
code
这两个选项都没有抛出任何异常,但也没有执行我预期的操作。看起来什么也没发生。我希望ctrl+a选择控件中的所有文本,然后ctrcl+c复制此选定文本。也许我在这里错了,这是不可能的?看看我的答案,我用代码编辑了我的文章,这些代码对我很有用。