private static string CreateIdentity(IHtmlElement element, bool ancestorsCreate) { string parentId; var parentElement = element.Parent(); if (parentElement != null) { parentId = Identity(parentElement); if (parentId == null) { if (ancestorsCreate) { parentId = Identity(parentElement, true, true); } else { parentId = CreateIdentity(parentElement, false); } } } else { if (element.Container is IHtmlDocument) { parentId = null; } else { throw new InvalidOperationException(); } } var name = GetElementName(element); var builder = new StringBuilder(); if (!string.IsNullOrEmpty(parentId)) { builder.AppendFormat("{0}_", parentId); } builder.Append(name); if (element.Siblings().Where(e => GetElementName(e).EqualsIgnoreCase(GetElementName(element))).IsSingle()) { return(builder.ToString()); } var index = element.SiblingsBeforeSelf().Count(e => GetElementName(e).EqualsIgnoreCase(GetElementName(element))); builder.Append(index + 1); var identity = builder.ToString(); return(EnsureUniqueness(identity, element.Document)); }
private static string CreateIdentity( IHtmlElement element, bool ancestorsCreate ) { string parentId; var parentElement = element.Parent(); if ( parentElement != null ) { parentId = Identity( parentElement ); if ( parentId == null ) { if ( ancestorsCreate ) parentId = Identity( parentElement, true, true ); else parentId = CreateIdentity( parentElement, false ); } } else { if ( element.Container is IHtmlDocument ) parentId = null; else throw new InvalidOperationException(); } var name = GetElementName( element ); var builder = new StringBuilder(); if ( !string.IsNullOrEmpty( parentId ) ) builder.AppendFormat( "{0}_", parentId ); builder.Append( name ); string identity; if ( element.Siblings().Where( e => GetElementName( e ).EqualsIgnoreCase( GetElementName( element ) ) ).IsSingle() ) identity = builder.ToString(); var index = element.SiblingsBeforeSelf().Count( e => GetElementName( e ).EqualsIgnoreCase( GetElementName( element ) ) ); builder.Append( index + 1 ); identity = builder.ToString(); return EnsureUniqueness( identity, element.Document ); }