今天我正在學習.NET UI自動化框架。所以到目前爲止我所做的(指各種文章)事件不會觸發listbox項目選擇 - .Net UIAutomation框架
有一個WinForm的Listbox,PictureBox,TextBox和Button控件。請參閱圖片:
我有一個控制檯應用程序,它具有所有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()方法確實起作用,並且如下所示選擇表單列表框項目 :
正如您在圖像,列表框項目被選中,但事件SelectedIndexChange沒有被激發,並且圖框不反映更改。
所以任何指針是有很大幫助:)
感謝
我不知道是什麼問題,但你可以通過添加'listbox1_selectedIndexChanged一個臨時的解決方法(NULL,NULL);'會後聲明'AutomationElement itemToSelectInListBox = listBoxItems [新的隨機()和Next(0, listBoxItems.Count - 1)]; ' – Marshal
正如我所說,這個自動化用戶界面API是在一個consoleapp(另一個項目和exe文件)和窗體是在另一個。我所能做的唯一方法就是使用relfection API。但是,如果我這樣做,它將是完全不同的實例,根本沒有連接。 – Zenwalker