我已经实现了一个桌面应用程序,该应用程序将xml加载到DataGridView上。当前,我正在为我的应用程序编写自动化测试,其中包括对datagridview的测试。我正在使用UI自动化来实现这一目标。
我遇到了DataGridView的问题,其中包括调用Grid的背景事件(例如CellClick或CellDoubleclick),并访问所选行中的值,并使用带有带有CEllDoubleClickEvent的文本框的相应值对其进行断言。
Please refer the image for better understanding
第1步和第2步:将XML加载并浏览到“网格视图”。
第3步:在您从DataGridView中选择行时,发生CellDoublickEvent或CellClick事件。
第4步:我们将相应的值提取到文本框中。 ID与SignalIndex映射,Value与DefaultValue映射。 (注意:文本框中的值将转换为十六进制。)
请在下面的代码中找到:
// Loads the application window elements correspionding to the ProcessID
var reloadApplication = loadElements(gridProcessID);
// Finds and loads the elements for the DataGridView dgv
var selectGrid = reloadApplication.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.AutomationIdProperty, "dgv"));
// get to ROW X (here it's row #1 name is always "Row X")
AutomationElement row = selectGrid.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "Row 0"));
// get row header
AutomationElement rowHeader = row.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Header));
// invoke it (select the whole line)
InvokePattern invokeRow = rowHeader.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
invokeRow.Invoke();
/// <summary>
/// This method loads the elements for the given Process ID.
/// </summary>
/// <param name="intProcessID"></param>
/// <returns></returns>
private AutomationElement loadElements(int intProcessID)
{
var rootElement = AutomationElement.RootElement;
if (rootElement == null)
{
return null;
}
var propertyNameOfRoot = new PropertyCondition(AutomationElement.ProcessIdProperty, intProcessID);
if (propertyNameOfRoot == null)
{
return null;
}
var tree = new TreeWalker(propertyNameOfRoot);
if (tree == null)
{
return null;
}
AutomationElement elementTree = tree.GetFirstChild(rootElement);
if (elementTree == null)
{
return null;
}
return elementTree;
}
上面的代码首先获取应用程序窗口的树元素,而findfirst获取DataGridView的元素树。其次,它从网格中获取第一行,invoke事件在网格视图中选择该行。 Example of what selection of row meant。
问题:
请让我知道是否有人需要更多信息。
先谢谢了。希望在这里找到解决方案。 :)