2015-07-12 240 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,那麼請閱讀它,基本上如果您更改系統生成的代碼而不移動它,那麼當您構建下一代時,您的代碼將被覆蓋,讓您想知道代碼的去向以及爲什麼你的測試停止工作。不要問我怎麼知道這個!