[Coded UI Test(CUIT)] 手動撰寫時取得畫面控件的方法

[Coded UI Test(CUIT)] 手動撰寫時取得畫面控件的方法

相信有些人會發現錄製的劇情可能在撥放的時候發現控件找不到,或者希望錄製的時候更有彈性,這篇紀錄了

一些撰寫的方法:

[如何評估找不找得到控件?]

Visual Studio 2010 Coded UI Tests: UIMaps

點下Locate the UI Control就會嘗試去抓取控件,如果可以抓到就會在你選取的控件旁邊顯示一個綠色勾勾。

image

通常如果找不到可能發生於幾個狀況,所以進行操作或驗證的時候,就要用手動撰寫程式碼來進行測試:

  • WinForm中彈出的警示/訊息視窗。
  • WinForm的FlowLayout作為容器的內容控件。

image

  • 同畫面同位置有多個控件,控件用隱藏的方式處理。
  • WinForm中,同畫面ListBox控件內的項目要是有變化的時候,例如下圖把ListBoxA的Product Item削減增加到ListBoxB中,這時候Product還是會被認定在ListBoxA中。

image

  • DataGridView內如果使用了例如DataGridViewComboBoxColumn這類比較複雜的Column。
  • 劇情中同樣的開窗出現多次的時候。
  • 拖曳功能。

 

[Web Form 方法一]

image

按F12打開開發者工具,右邊框框點選屬性,可以看到控件的屬性

未命名

可以看得出節點為input,挑出可以供辨識的屬性來進行Code:


HtmlEdit tInput = new HtmlEdit(window);
tInput.SearchProperties[HtmlEdit.PropertyNames.Name] = "q";
tInput.SearchProperties[HtmlEdit.PropertyNames.Class] = "lst";
tInput.Find();

[Web Form 方法二]

用錄製的功能驗證某欄位後去看UIMap檔:

image

點選中間的UIControlMap中的節點,打開屬性視窗中的SearchProperties

image

也可以根據這些Properties來撰寫Code


//ControlType
HtmlEdit tInput = new HtmlEdit(window); 
//Name
tInput.SearchProperties[HtmlEdit.PropertyNames.Name] = "q";
//Type
tInput.SearchProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE";
tInput.Find();

[Win Form]

image

image


//ControlType = Button
WinButton tButton = new WinButton();
//Name = 等於
tButton.SearchProperties[WinButton.PropertyNames.Name] = "等於"; 
tButton.Find();

[有時候控件實在可供辨識的項目太少或者畫面上有類似的項目造成一直點錯怎麼辦?]

以UIMap為例,它其實是一個階層式的結構

image

當然Html原始碼也是

image

所以其實可以用一層一層的方式去進行控件的尋找,先找到上層element,再去找底下的element。

 

以下面的程式碼為例:


HtmlTable tTable = new HtmlTable();
tTable.SearchProperties[HtmlEdit.PropertyNames.Id] = "TableID";
HtmlCell tCell = new HtmlCell(tTable);
tCell.SearchProperties[HtmlCell.PropertyNames.RowIndex] = "1";
tCell.SearchProperties[HtmlCell.PropertyNames.ColumnIndex] = "0";

就是先找到Id叫做TableID的Table,然後取它底下的第1個Row第0個Column的Cell。

 

 

希望對大家有所幫助^^