protected virtual string DetermineName(PageObjectDefinition pageObject, SeleniumGeneratorContext context) { // if selector is set, just read it and don't add data context prefixes //var shouldAddDataContextPrefixes = uniqueName == null; var shouldAddDataContextPrefixes = true; // if not found, use the name properties to determine the name string uniqueName = null; foreach (var nameProperty in NameProperties) { uniqueName = SelectorStringHelper.TryGetNameFromProperty(context.Control, nameProperty); if (uniqueName != null) { uniqueName = SelectorStringHelper.NormalizeUniqueName(uniqueName); break; } } // if not found, try to use the content of the control to determine the name if (uniqueName == null && CanUseControlContentForName) { uniqueName = SelectorStringHelper.GetTextFromContent(context.Control.Content); } // check if control is userControl and assign control's name as unique name if (uniqueName == null && context.Control.DothtmlNode is DothtmlElementNode htmlNode) { uniqueName = htmlNode.TagName; // not add DataContext when generating page object for user control shouldAddDataContextPrefixes = false; } // if not found, use control name if (uniqueName == null) { uniqueName = typeof(TControl).Name; } if (shouldAddDataContextPrefixes) { uniqueName = SelectorStringHelper.AddDataContextPrefixesToName(pageObject.DataContextPrefixes, uniqueName); } return(uniqueName); }
/// <summary> /// Gets a list of declarations emitted by the control. /// </summary> public void AddDeclarations(PageObjectDefinition pageObject, SeleniumGeneratorContext context) { string propertyName; var htmlName = SelectorStringHelper.TryGetNameFromProperty(context.Control, UITests.NameProperty); if (htmlName == null) { // determine the name propertyName = DetermineName(pageObject, context); } else { propertyName = htmlName; } // normalize name var normalizedName = SelectorStringHelper.RemoveNonIdentifierCharacters(propertyName); // make the name unique var uniqueName = MakePropertyNameUnique(context.UsedNames, normalizedName); context.UsedNames.Add(uniqueName); context.UniqueName = uniqueName; // determine the selector if (htmlName == null) { context.Selector = uniqueName; AddUITestNameProperty(pageObject, context, uniqueName); } else { context.Selector = htmlName; } context.UsedNames.Add(propertyName); AddDeclarationsCore(pageObject, context); }