2016-08-05 12 views
0

Я пытаюсь дважды щелкнуть строку в WPat datagrid. Для достижения этой цели я использую следующий код:Почему Mouse.DoubleClick работает нормально, когда Coded UI test выполняется через MTM?

WpfTable invoiceList = new WpfTable(base.MainWindow); 
invoiceList.SearchProperties.Add(WpfTable.PropertyNames.AutomationId, "datagridID"); 
invoiceList.WaitForControlReady(15000); 

Mouse.DoubleClick(invoiceList.GetRow(0)); 

Когда я бегу это на моей машине тест пройден, но когда я запускаю тот же тест через МТМ я получаю следующее сообщение об ошибке:

Test method org.Application.Automation.TestCases.CommentsTests.VerifyExistingCommentsTest threw exception: Microsoft.VisualStudio.TestTools.UITest.Extension.PlaybackFailureException: Cannot perform 'DoubleClick' on the control. Additional Details: TechnologyName: 'UIA' ControlType: 'Row' FrameworkId: 'WPF' ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.

Может ли кто-нибудь указать в правильном направлении, как я могу это исправить?

+0

Извините, что я глуп, чтобы спросить об этом, но просто хочу подтвердить, будет ли кнопка или элемент управления, на который вы дважды щелкаете, позволит вам дважды щелкнуть вручную? – Siva

+0

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

+0

@ Шива позволяет мне дважды щелкнуть вручную. Когда я запускаю тот же (автоматический) тест на своей машине, он проходит, но он терпит неудачу, когда я запускаю его через MTM. –

ответ

0

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

WpfControl row = invoiceList.GetRow(0); 
row.WaitForControlReady(); 

Mouse.DoubleClick(new System.Drawing.Point(row.BoundingRectangle.X + row.BoundingRectangle.Width, row.BoundingRectangle.Y + row.BoundingRectangle.Height/2)); 

Таким образом, вместо двойного щелчка на объекте WpfRow, я использовал вариант (новый System.Drawing.Point()) в Mouse.DoubleClick и прошел центральную точку (т.е. System.Drawing.Point) в качестве параметра. Что касается того, почему предыдущий подход не сработал, я боюсь, что не могу объяснить.