1

Very simple, trying to get data in each cell in a a certain row. code sample (Please read comments)

//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);
  }
}

Basically as u can see, i can easily get the amount of rows, the amount of cells in each row, but when it comes retrieving the cell data, it returns null. could it be a cache issue?

(Sorry for my formatting)

1 Answers1

0

So after tinkering with it a bit, i found that i don't actually need to push cache, and i can directly a cell:

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();

this gets the second cell of each row.