public AutomationElement GetPreviousSibling (AutomationElement element)
{
if (element == null)
throw new ArgumentNullException ("element");
if (element == AutomationElement.RootElement)
return null;
AddMarkedElement (element);
AutomationElement sibling = GetPreviousDirectSibling (element);
AutomationElement previousParent = null;
if (sibling == null && condition != Automation.RawViewCondition) {
previousParent = TreeWalker.RawViewWalker.GetParent (element);
markedElements.Add (previousParent);
sibling = TreeWalker.RawViewWalker.GetParent (previousParent);
}
if (sibling == null)
return null;
AutomationElement prevSibling = null;
if (!markedElements.Contains (sibling) && condition.AppliesTo (sibling))
prevSibling = sibling;
else {
while (sibling != null && prevSibling == null && sibling != AutomationElement.RootElement) {
prevSibling = GetLastChild (sibling, previousParent);
previousParent = sibling;
sibling = TreeWalker.RawViewWalker.GetParent (sibling);
}
}
return prevSibling;
}
#endregion