【问题标题】:Coded UI Mouse.Click() sometimes gets an error about int32编码的 UI Mouse.Click() 有时会收到有关 int32 的错误
【发布时间】:2014-02-19 08:56:52
【问题描述】:

当我尝试在查看器内的某个点上执行 mouse.Click() 时,出现以下错误。

代码优先:

public void ClickOnViewerSpace(int addX = 0, int addY = 0) {            
        //Mouse.Click(new Point(2439 + addX, 560 + addY));
        int x = _contentContainer.BoundingRectangle.Location.X;
        int y = _contentContainer.BoundingRectangle.Location.Y;
        Mouse.Click(new Point(x + addX, y + addY));
}

错误:

测试名称:TC1_9_2_AdminEnter 测试全名:测试源:第 427 行 测试结果:失败测试持续时间:0:00:31.5364285

结果消息:测试方法抛出异常: Microsoft.VisualStudio.TestTools.UITest.Extension.PlaybackFailureException: 无法在控件上执行“单击”。附加细节:控制 没有具体说明细节。 ---> System.Runtime.InteropServices.COMException:错误 HRESULT E_FAIL 有 从对 COM 组件的调用中返回。结果堆栈跟踪:在 Microsoft.VisualStudio.TestTools.UITest.Playback.Engine.IScreenElement.MouseButtonClick(Int32 x, Int32 y, Int32 nButton, Int32 fEnsureVisible, 字符串 bstrKeyModifiers) 在 Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.MouseButtonClick(Int32 x, Int32 y, MouseButtons 按钮, ModifierKeys modifierKeys, Int32 确保可见)在 Microsoft.VisualStudio.TestTools.UITesting.UITestActionExecutorCore.Click(UITestControl 控件、MouseButtons 按钮、ModifierKeys 修饰键、点 relativeCoordinate) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowComException(COMException innerException,IPlaybackContext 上下文)在 Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException(SystemException 异常,IPlaybackContext 上下文)在 Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException(SystemException 异常,字符串 actionName,UITestControl uiControl)在 Microsoft.VisualStudio.TestTools.UITesting.UITestActionExecutorCore.Click(UITestControl 控件、MouseButtons 按钮、ModifierKeys 修饰键、点 相对坐标)在 Microsoft.VisualStudio.TestTools.UITesting.Mouse.ClickImplementation(UITestControl 控件、MouseButtons 按钮、ModifierKeys 修饰键、点 相对坐标)在 Microsoft.VisualStudio.TestTools.UITesting.Mouse.c__DisplayClass6.b__5() 在 Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod[T](Func`1 函数,UITestControl 控件,布尔型 firePlaybackErrorEvent, 布尔 logAsAction) 在 Microsoft.VisualStudio.TestTools.UITesting.Mouse.Click(UITestControl 控件、MouseButtons 按钮、ModifierKeys 修饰键、点 相对坐标)在 Microsoft.VisualStudio.TestTools.UITesting.Mouse.Click(点 屏幕坐标)在 ObjectsRepository.TouchViewer.ClickOnViewerSpace(Int32 addX, Int32 addY) 在 d:\test\auto\ObjectsRepository\TouchViewer.cs:109 行

【问题讨论】:

    标签: c# .net visual-studio-2012 automated-tests coded-ui-tests


    【解决方案1】:

    似乎即使存在Mouse.Click(Point) 方法,CUIT 框架也不允许没有UITestControl 的单击操作。这是一个很好的链接:Mouse.Click using Point only

    堆栈跟踪看起来与此对齐,因为在初始 Mouse.Click(Point) 调用之后的每个方法都依赖于 UITestControl

    根据发布的代码,我会尝试这样的事情:

    public void ClickOnViewerSpace(int addX = 0, int addY = 0)
    {
        //int x = _contentContainer.BoundingRectangle.Location.X;
        //int y = _contentContainer.BoundingRectangle.Location.Y;
        //Mouse.Click(new Point(x + addX, y + addY));
        Mouse.Click(_contentContainer, new Point(addX, addY)); // relative coords
    }
    

    【讨论】:

      【解决方案2】:

      另一种选择是在基于此控件生成坐标之前添加_contentContainer.Find()

      【讨论】:

        【解决方案3】:

        感谢所有领导解决我两天来遇到的类似问题...我的搜索是如何通过 CodedUI 自动化在 Windows 应用程序中单击具有网格隐藏属性的单元格

        我的 Sol 如下所示,.. credits @MSDN link dude

        public void InstantiateControls() {

                #region  UserSearch
                frSearchUsers = new ControlWithContainer<WinGroup>(this.SourceControl, By.ControlName("frSearchUsers"));
                txtFindUser = new ControlWithContainer<WinEdit>(this.SourceControl, By.ControlName("txtFindUser"));
                vgrdUsers = new ControlWithContainer<WinWindow>(frSearchUsers.Control.SourceControl, By.ControlName("vgrdUsers"));
                vgrdUserscUSTOM = new ControlWithContainer<WinCustom>(vgrdUsers.Control.SourceControl, By.ControlName("vgrdUsers"));
        
                #endregion
            }
        
            public void clickCell()
            {
                var cellGrid = vgrdUserscUSTOM.Control.SourceControl;
                UITestControl cellGridCell = new UITestControl(cellGrid);
                cellGridCell.SearchProperties["ControlType"] = "Cell";
                cellGridCell.SearchProperties["InnerText"] = "Dawson,Jade";            
                if (cellGridCell.TryFind())
                {
                    cellGridCell.SetFocus();
                    cellGridCell.Find();             
        
                    UITestControlCollection uic = cellGridCell.FindMatchingControls();
        
                    foreach (UITestControl ui in uic)
                    {
                        if (ui.BoundingRectangle.Width > 0)
                        {
                            Mouse.Click(ui);
                            break;
                        }
        
                    }
        
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-19
          • 2014-04-06
          • 2018-06-13
          • 1970-01-01
          • 1970-01-01
          • 2021-11-11
          • 1970-01-01
          • 2021-04-05
          相关资源
          最近更新 更多