public AutomationElement GetNextSibling (AutomationElement element)
{
if (element == null)
throw new ArgumentNullException ("element");
if (element == AutomationElement.RootElement)
return null;
AddMarkedElement (element);
AutomationElement sibling = GetNextDirectSibling (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 nextSibling = null;
if (!markedElements.Contains (sibling) && condition.AppliesTo (sibling))
nextSibling = sibling;
else {
while (sibling != null && nextSibling == null && sibling != AutomationElement.RootElement) {
nextSibling = GetFirstChild (sibling, previousParent);
previousParent = sibling;
sibling = TreeWalker.RawViewWalker.GetParent (sibling);
}
}
return nextSibling;
}