我今天正在学习.NET UI自动化框架。那么到目前为止我所做的(参考各种文章)
有一个带有Listbox,PictureBox,TextBox和Button控件的WinForm。请参考图片:
我有一个consoleapp,它拥有所有UI自动化测试脚本或自动执行winform UI测试的代码。
工作: 从列表框中选择项目后,图片框会加载一些图像并显示它(要加载的代码在列表框的SelectedIndexChanged事件中)。
下面是Forms listBox控件的代码:
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()方法确实有效,并且如图所示选择了Form列表框项 :
正如您在图片中看到的那样,列表框项目已被选中但事件SelectedIndexChange未被触发且图片框未反映更改。
所以任何指针都有很大的帮助:)
由于
答案 0 :(得分:1)
@zenwalker 列表是否由数据绑定填充?如果是,则有机会选择事件不会触发。你能共享将数据绑定到列表框的代码吗?抱歉,我没有足够的代表来添加评论。
或者您可以参考以下SO文章,了解我们如何对数据库进行数据绑定Winforms, databinding, Listbox and textbox
答案 1 :(得分:1)
如果SelectionMode更改为MultiSimple,则此方法有效。我不确定为什么会这样。 但是如果SelectionMode为One,则不会触发selectedindexevent。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
SelectedIndexChanged
设置为单个或一个时,不会触发事件SelectionMode
。
确保在SelectionChanged
事件被触发时也更新PictureBox