コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }