private void WriteElementToXml(XmlWriter writer, FrameworkElement item) { if (item == null) { return; } writer.WriteStartElement(item.GetType().ToString()); var coordinates = item.GetCoordinatesInView(this.Automator.VisualRoot); var rect = item.GetRect(this.Automator.VisualRoot); var attributes = new Dictionary <string, string> { { "name", item.AutomationName() }, { "id", item.AutomationId() }, { "xname", item.Name }, { "visible", item.IsUserVisible(this.Automator.VisualRoot) .ToString() .ToLowerInvariant() }, { "value", item.GetText() }, { "x", rect.X.ToString(CultureInfo.InvariantCulture) }, { "y", rect.Y.ToString(CultureInfo.InvariantCulture) }, { "width", rect.Width.ToString(CultureInfo.InvariantCulture) }, { "height", rect.Height.ToString(CultureInfo.InvariantCulture) }, { "clickable_point", coordinates.ToString(CultureInfo.InvariantCulture) } }; foreach (var attribute in attributes) { writer.WriteAttributeString(attribute.Key, attribute.Value); } var children = Finder.GetChildren(item); if (item == this.Automator.VisualRoot) { children = children.Concat(Finder.GetPopupsChildren()); } foreach (var child in children) { this.WriteElementToXml(writer, child as FrameworkElement); } writer.WriteEndElement(); }