注意:这不再是问题,.NET 4 内置的 DataGrid 解决了这个问题
我有一个使用 DataGrid 的 WPF 应用程序;我正在使用 WPF ui 自动化 API 为其编写一些自动化测试。DataGrid 是 WPFToolkit 之一,我使用 .NET 3.5SP1 和 VS2008,并且数据网格启用了多选功能。
我的位置是从我的测试中可以找到数据网格,我可以使用该方法在网格中找到单个单元格GridPattern.GetItem
,并通过设置来选择它们SelectionItemPattern.Select
。方法
代码看起来有点像这样:
AutomationElement mainGrid = // find the grid in the window
var columnCount = (int)mainGrid.GetCurrentPropertyValue(GridPattern.ColumnCountProperty);
var mainGridPattern = (GridPattern)mainGrid.GetCurrentPattern(GridPattern.Pattern);
var rowToSelect = 2;
// select just the first cell
var item = mainGridPattern.GetItem(rowToSelect, 0);
var itemPattern = (SelectionItemPattern)item.GetCurrentPattern(SelectionItemPattern.Pattern);
itemPattern.Select();
这似乎可行,但它只选择第一个单独的单元格,而不是整个表格行(有 10 列),但我不知道如何取消选择一个项目。我能找到的唯一看起来可能有效的方法是调用或相应SelectionItemPattern.AddToSelection()
的,但是当我执行其中任何一个时,会引发以下异常:itemPattern
RemoveFromSelection
=> 当 SelectionUnit 为 FullRow 时无法更改单元格选择。 在 MS.Internal.Automation.ElementUtil.Invoke(AutomationPeer 对等体,DispatcherOperationCallback 工作,对象 arg) 在 MS.Internal.Automation.SelectionItemProviderWrapper.AddToSelection()
潜在的根本问题似乎是(据我所知)WPF UI 自动化 API 没有网格行的概念,只有单元格。这似乎有些问题 - 这是对的吗?
旁注:我之前一直在使用 White UI 自动化框架 - 这不使用 UI 自动化来选择网格行,而是将鼠标移动到行位置并单击它 - 这导致我们的测试随机失败 - 这就是为什么他们'虽然使用鼠标进行选择?