private bool IsDecoratableField(FieldInfo field)
        {
            // TODO Protecting wrapped element from initialization basing on its name is unsafe. Think of a better way.
            if (HtmlElementUtils.IsWebElement(field) && field.Name != "wrappedElement")
            {
                return(true);
            }

            return(HtmlElementUtils.IsWebElementList(field) || HtmlElementUtils.IsHtmlElement(field) || HtmlElementUtils.IsHtmlElementList(field) ||
                   HtmlElementUtils.IsTypifiedElement(field) || HtmlElementUtils.IsTypifiedElementList(field));
        }
 /// <summary>
 ///     Builds the by.
 /// </summary>
 /// <returns>The value.</returns>
 public override By BuildBy()
 {
     if (HtmlElementUtils.IsHtmlElement(Property) || HtmlElementUtils.IsHtmlElementList(Property))
     {
         var type = HtmlElementUtils.IsHtmlElementList(Property)
                                 ? HtmlElementUtils.GetGenericParameterType(Property)
                                 : Property.PropertyType;
         return(BuildByFromHtmlElementAttributes(type));
     }
     return(base.BuildBy());
 }
Exemplo n.º 3
0
 /// <summary>
 ///     Populates the specified instance.
 /// </summary>
 /// <param name="instance">The instance.</param>
 /// <param name="driver">The driver.</param>
 public static void Populate(object instance, IWebDriver driver)
 {
     if (HtmlElementUtils.IsHtmlElement(instance))
     {
         var htmlElement = (HtmlElement)instance;
         PopulateHtmlElement(htmlElement, driver);
     }
     else
     {
         PopulatePageObject(instance, driver);
     }
 }
Exemplo n.º 4
0
 public override By BuildBy()
 {
     if (HtmlElementUtils.IsHtmlElement(Field) || HtmlElementUtils.IsHtmlElementList(Field))
     {
         Type type = HtmlElementUtils.IsHtmlElementList(Field) ? HtmlElementUtils.GetGenericParameterType(Field) : Field.FieldType;
         return(BuildByFromHtmlElementAttributes(type));
     }
     else
     {
         return(base.BuildBy());
     }
 }
        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);
        }
Exemplo n.º 7
0
        public static T Create <T>(IWebDriver driver)
        {
            object result;
            Type   type = typeof(T);

            if (HtmlElementUtils.IsHtmlElement(type))
            {
                result = HtmlElementFactory.CreateHtmlElementInstance(type);
                PopulateHtmlElement((HtmlElement)result, new HtmlElementLocatorFactory(driver));
            }
            else
            {
                result = (T)HtmlElementFactory.CreatePageObjectInstance(type, driver);
                PopulatePageObject(result, new HtmlElementLocatorFactory(driver));
            }
            return((T)result);
        }