2017-09-03 96 views
0

非常に簡単で、特定の行の各セルでデータを取得しようとしています。 uが見ることができるように、私は簡単に行の量、各行の細胞の量を得ることができますが、それはセルデータを取得するとなると のサンプルコード(コメントを読んでください)データグリッドからセルの内容を取得する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(); 

この各行の2番目のセルを取得します。

関連する問題