1

今天我正在學習.NET UI自動化框架。所以到目前爲止我所做的(指各種文章)事件不會觸發listbox項目選擇 - .Net UIAutomation框架

  1. 有一個WinForm的Listbox,PictureBox,TextBox和Button控件。請參閱圖片:WinForm to be tested

  2. 我有一個控制檯應用程序,它具有所有UI自動化測試腳本或代碼,可以自動進行winform UI測試。

工作: 一旦從列表框中選擇項目,圖片框加載一些圖像,並顯示它(加載代碼是在列表框的SelectedIndexChanged事件)。

下面是窗體列表框控件的代碼:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     textBox1.BackColor = Color.White; 
     pictureBox1.Image = imageCollection.ElementAtOrDefault(listBox1.SelectedIndex); 
     textBox1.Text = pictureBox1.Image.GetHashCode().ToString(); 
     this.Refresh(); 
    } 

現在我UIAutomation測試腳本代碼如下所示:(只顯示必要的部分)

 AutomationElement listBoxElement = mainFormWindowElement.FindFirst(TreeScope.Children, 
      new PropertyCondition(AutomationElement.AutomationIdProperty, "listBox1")); 

     Assert.IsNotNull(listBoxElement, "Cant find the listbox element"); 

     AutomationElementCollection listBoxItems = 
      listBoxElement.FindAll(TreeScope.Children,new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.ListItem)); 

     AutomationElement itemToSelectInListBox = listBoxItems[new Random().Next(0, listBoxItems.Count - 1)]; 

     Object selectPattern = null; 

     if (itemToSelectInListBox.TryGetCurrentPattern(SelectionItemPattern.Pattern, out selectPattern)) 
     { 
      (selectPattern as SelectionItemPattern).AddToSelection(); 
      (selectPattern as SelectionItemPattern).Select(); 

     } 

執行代碼後, Select()方法確實起作用,並且如下所示選擇表單列表框項目 :enter image description here

正如您在圖像,列表框項目被選中,但事件SelectedIndexChange沒有被激發,並且圖框不反映更改。

所以任何指針是有很大幫助:)

感謝

+0

我不知道是什麼問題,但你可以通過添加'listbox1_selectedIndexChanged一個臨時的解決方法(NULL,NULL);'會後聲明'AutomationElement itemToSelectInListBox = listBoxItems [新的隨機()和Next(0, listBoxItems.Count - 1)]; ' – Marshal

+0

正如我所說,這個自動化用戶界面API是在一個consoleapp(另一個項目和exe文件)和窗體是在另一個。我所能做的唯一方法就是使用relfection API。但是,如果我這樣做,它將是完全不同的實例,根本沒有連接。 – Zenwalker

回答

1

@zenwalker 是列表的數據綁定填充?如果是的話,有一個機會選擇事件不會發生。你能分享將數據綁定到列表框的代碼嗎?爲了回答這個問題抱歉,我沒有足夠的代表來添加評論。

或者你可以參考下面的SO文章,看看我們如何能做到數據綁定列表框Winforms, databinding, Listbox and textbox

+0

不,我在設計時自己手動添加了列表框的內容。所以我沒有在這裏使用任何數據綁定的上下文。謝謝:) – Zenwalker

1

這工作如果selectionMode是改變爲MultiSimple。我不知道爲什麼會發生這種情況。 但是,如果SelectionMode是One,selectedIndexevent不會被觸發。

+1

試過雙方,死路一條! – Zenwalker

0

事件SelectedIndexChanged未被觸發,而SelectionMode被設置爲單個或一個。

請確保您更新圖片框也同時SelectionChanged事件被觸發

1

也許有點晚,但我還是希望這將有助於人:

我有完全相同的問題。能夠通過點擊鼠標來觸發事件。對於下面的代碼,您將需要對Microsoft.TestAPI(http://www.nuget.org/packages/Microsoft.TestApi/0.6.0)的引用,但還有其他方法可以模擬點擊。

static AutomationElement SelectItem(AutomationElement item) 
    { 
     if (item != null) 
     { 
      ((SelectionItemPattern)item.GetCurrentPattern(SelectionItemPattern.Pattern)).Select(); 
      System.Windows.Point point = item.GetClickablePoint(); 
      Microsoft.Test.Input.Mouse.MoveTo(new System.Drawing.Point((int)point.X, (int)point.Y)); 
      Microsoft.Test.Input.Mouse.Click(MouseButton.Left); 
     } 

     return item; 
    } 
相關問題