2015-07-12 235 views
3

如何在所有屏幕类型中点击按钮的特定部分?我有下拉值的按钮,我需要点击DownArrow中文图像上,我尝试下面的代码:CodedUi:鼠标点击坐标

Mouse.click(someBtn,new Point(250,45)); 

这工作在我的屏幕,这个点击了其他位置上,因为轴发生改变桌面。建议一些解决方法或解决方案。

+0

你能点击图片本身吗? –

+0

@ErwinRooijakkers:它没有图像。没有具体的ID或东西。 –

回答

5

先给相对于正在单击控件的位置,而不是绝对的点, 使用这个属性:

uitestcontrol.BoundingRectangle 

这样的:

var btnPosition= someBtn.BoundingRectangle 

,然后选择位置你想根据控件当前位置点击。

例如:

Point relativePoint = new Point(btnPosition.X + 40, btnPosition.Y - 40); 
Mouse.click(someBtn,relativePoint); 
+1

是的,即使我正在考虑这样做。谢谢。 –

+0

虽然我必须删除someBtn,但我的点击变成了:Mouse.Click(relativePoint) –

+1

OP使用的'Mouse.Click()'重载已经占用了一个相对点,但它似乎有一些未定义的魔术可以改变它如果您在控件外指定一个点,或者可能位于不可点击的点上。在这个答案中使用绝对的'Click()'超载保证点击点是你想要的地方。 – GazTheDestroyer

0

感谢所有的铅对固定,我面对&打出了两天...我的搜索是如何单击单元格与网格的隐藏属性类似的问题通过CodedUI自动化Windows应用程序

我去太阳下面,..学分@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; 
       } 

      } 

     } 
0

我牛逼他的问题和我在上面的评论中找到了和Niels一样的解决方案。如果你这样做,你实际上做的是忽略UI元素,并且你点击屏幕上的已知点。你的窗户不能移动,因此无法工作。因此,Niels和我自己使用的解决方案可以在一行代码中完成(不需要Bounding矩形或someBtn),像这样...

Mouse.Click(new Point(575,920));

风险在于您的窗口会移动,但由于某些原因,编码的UI有一个无法点击的点,所以我看不到任何其他方式。这行代码位于我的UIMap.cs中的一个方法中(通过右键单击UIMap.uitest中的方法并选择“将代码移动到UIMap.cs”来移动该方法)。所以我同意尼尔斯的观点,但是如果你这样做,那个答案中的其他代码就不会被使用!

如果您不知道移动代码到UIMap.cs,那么请阅读它,基本上如果您更改系统生成的代码而不移动它,那么当您构建下一代时,您的代码将被覆盖,让您想知道代码的去向以及为什么你的测试停止工作。不要问我怎么知道这个!