2017-09-03 63 views
0

非常简单,试图获取某个行中每个单元格中的数据。 代码示例(请阅读评论)从数据网格中检索单元格内容AutomationUI

//Get Main window 
AutomationElement prog = AutomationElement.RootElement.FindFirst(TreeScope.Children, 
    new PropertyCondition(AutomationElement.NameProperty, mainTitle)); 
//Get data grid 
var datagrid = prog.FindFirst(TreeScope.Children, 
    new PropertyCondition(AutomationElement.AutomationIdProperty, "AccountGrid")); 

//get rows (returns the correct value) 
var rows = datagrid.FindAll(TreeScope.Descendants, 
    new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem)); 

foreach (AutomationElement row in rows) 
{ 
    //Is NOT null and returns 5, as the number of cells in each row 
    var findRow = row.FindAll(TreeScope.Children, 
     new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom)); 
    Console.WriteLine("Is findrow null ?: " + (findRow == null) + "cell count: " + findRow.Count); 

    for (int i = 0; i < findRow.Count -1; i++) 
    { 
     //cache request 
     var cacheRequest = new CacheRequest 
     { 
      AutomationElementMode = AutomationElementMode.None, 
      TreeFilter = Automation.RawViewCondition 
     }; 
     cacheRequest.Add(AutomationElement.NameProperty); 
     cacheRequest.Add(AutomationElement.AutomationIdProperty); 
     cacheRequest.Push(); 
     //Could be a problem with the propertyname? 
     var cellText = findRow[i].FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Profile")); 
     //RETURNS NULL! 
     Console.WriteLine("Is cellText null? " + (cellText == null)); 
     cacheRequest.Pop(); 
     Console.WriteLine(cellText.Cached.Name); 
    } 
} 

基本上就像你看到的,我可以轻松地获得行的量,细胞的每一行中的量,但是当它涉及检索单元中的数据,则返回null 。它可能是一个缓存问题?

(对不起,我的格式)

回答

0

所以用它修补了一下后,我发现我实际上并不需要推缓存,我可以直接在单元格:

try 
{ 
    AutomationElement prog = AutomationElement.RootElement.FindFirst(TreeScope.Children, 
     new PropertyCondition(AutomationElement.NameProperty, "Window Title")); 
    var datagrid = prog.FindFirst(TreeScope.Children, 
     new PropertyCondition(AutomationElement.AutomationIdProperty, "Your grid")); 
    var rows = datagrid.FindAll(TreeScope.Children, 
     new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem)); 
    foreach (AutomationElement row in rows) 
    { 
     var findRow = row.FindAll(TreeScope.Children, 
      new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom)); 
     Console.WriteLine("==============="); 
     Console.WriteLine(findRow[1].Current.Name); 
    } 

    Console.WriteLine("==============="); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(string.Format("{0}{1}", e.Message, 
     " At Line:" + e.StackTrace.Substring(e.StackTrace.LastIndexOf(' ')))); 
} 
Console.ReadLine(); 

这获取每一行的第二个单元格。

相关问题