public override object Decorate(FieldInfo field) { //if (!IsDecoratableField(field)) //{ // return null; //} IElementLocator locator = factory.CreateLocator(field); if (locator == null) { return(null); } String elementName = HtmlElementUtils.GetElementName(field); //if (HtmlElementUtils.IsTypifiedElement(field)) //{ Type typifiedElementType = field.FieldType; return(DecorateTypifiedElement(typifiedElementType, locator, elementName)); //} if (HtmlElementUtils.IsHtmlElement(field)) { Type htmlElementType = field.FieldType; return(DecorateHtmlElement(htmlElementType, locator, elementName)); } else if (HtmlElementUtils.IsWebElement(field)) { return(DecorateWebElement(locator, elementName)); } //else if (HtmlElementUtils.IsTypifiedElementList(field)) //{ // Type typifiedElementType = HtmlElementUtils.GetGenericParameterType(field); // return DecorateTypifiedElementList(field.FieldType, typifiedElementType, locator, elementName); //} else if (HtmlElementUtils.IsHtmlElementList(field)) { Type htmlElementType = HtmlElementUtils.GetGenericParameterType(field); return(DecorateHtmlElementList(field.FieldType, htmlElementType, locator, elementName)); } else if (HtmlElementUtils.IsWebElementList(field)) { return(DecorateWebElementList(locator, elementName)); } return(null); }
/// <summary> /// Decorates the specified property info. /// </summary> /// <param name="propertyInfo">The property info.</param> /// <returns>The value.</returns> public override object Decorate(PropertyInfo propertyInfo) { if (!IsDecoratableProperty(propertyInfo)) { return(null); } var locator = Factory.CreateLocator(propertyInfo); if (locator == null) { return(null); } var elementName = HtmlElementUtils.GetElementName(propertyInfo); if (HtmlElementUtils.IsTypifiedElement(propertyInfo)) { var typifiedElementType = propertyInfo.PropertyType; return(DecorateTypifiedElement(typifiedElementType, locator, elementName)); } if (HtmlElementUtils.IsHtmlElement(propertyInfo)) { var htmlElementType = propertyInfo.PropertyType; return(DecorateHtmlElement(htmlElementType, locator, elementName)); } if (HtmlElementUtils.IsWebElement(propertyInfo)) { return(DecorateWebElement(locator, elementName)); } if (HtmlElementUtils.IsTypifiedElementList(propertyInfo)) { var typifiedElementType = HtmlElementUtils.GetGenericParameterType(propertyInfo); return(DecorateTypifiedElementList(propertyInfo.PropertyType, typifiedElementType, locator, elementName)); } if (HtmlElementUtils.IsHtmlElementList(propertyInfo)) { var htmlElementType = HtmlElementUtils.GetGenericParameterType(propertyInfo); return(DecorateHtmlElementList(propertyInfo.PropertyType, htmlElementType, locator, elementName)); } if (HtmlElementUtils.IsWebElementList(propertyInfo)) { return(DecorateWebElementList(locator, elementName)); } return(null); }
/// <summary> /// Populates the HTML element. /// </summary> /// <param name="htmlElement">The HTML element.</param> /// <param name="locatorFactory">The locator factory.</param> private static void PopulateHtmlElement(HtmlElement htmlElement, CustomElementLocatorFactory locatorFactory) { var htmlElementType = htmlElement.GetType(); // Create locator that will handle Block annotation var locator = locatorFactory.CreateLocator(htmlElementType); // The next line from Java code located here till I find a solution to replace ClassLoader // ClassLoader htmlElementClassLoader = htmlElement.getClass().getClassLoader(); // Initialize block with IWebElement proxy and set its name var elementName = HtmlElementUtils.GetElementName(htmlElementType); var elementToWrap = HtmlElementFactory.CreateNamedProxyForWebElement(locator, elementName); htmlElement.WrappedElement = elementToWrap; htmlElement.Name = elementName; // Initialize elements of the block PageFactory.InitElements(new HtmlElementDecorator(elementToWrap), htmlElement); }