/// <summary>
        /// Gets the item by class.
        /// </summary>
        /// <param name="className">Name of the class.</param>
        /// <param name="stringComparison">The string comparison.</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public virtual MenuItemComponent GetItemByClass(string className,
                                                        StringComparison stringComparison = StringComparison.Ordinal)
        {
            var menuItemEl = ItemElements.FirstOrDefault(el =>
            {
                return(el
                       .FindElements(itemIconSeletor)
                       .Any(
                           iconEl => iconEl.Classes().Any(
                               @class => String.Equals(
                                   @class,
                                   className,
                                   stringComparison))));
            });

            if (menuItemEl == null)
            {
                throw new NoSuchElementException();
            }

            var cssSelector = WrappedDriver.GetCssSelector(menuItemEl);

            return(pageObjectFactory.PrepareComponent(
                       new MenuItemComponent(
                           cssSelector,
                           pageObjectFactory,
                           WrappedDriver)));
        }
        /// <summary>
        /// Gets the item by text.
        /// </summary>
        /// <param name="itemName">Name of the item.</param>
        /// <param name="stringComparison">The string comparison.</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public virtual MenuItemComponent GetItemByText(string itemName,
                                                       StringComparison stringComparison = StringComparison.Ordinal)
        {
            var menuItemEl = ItemElements.FirstOrDefault(el =>
            {
                return(el.FindElements(itemNameSelector)
                       .Any(name => String.Equals(
                                el.TextHelper().InnerText,
                                itemName,
                                stringComparison)));
            });

            if (menuItemEl == null)
            {
                throw new NoSuchElementException();
            }

            var cssSelector = WrappedDriver.GetCssSelector(menuItemEl);

            return(pageObjectFactory.PrepareComponent(
                       new MenuItemComponent(
                           cssSelector,
                           pageObjectFactory,
                           WrappedDriver)));
        }
        /// <summary>
        /// Gets the menu item at the index.
        /// </summary>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public virtual MenuItemComponent GetMenuItemAt(int index)
        {
            var menuItem = pageObjectFactory.PrepareComponent(
                new MenuItemComponent(
                    WrappedDriver.GetCssSelector(ItemElements.ElementAt(index)),
                    pageObjectFactory,
                    WrappedDriver));

            return(menuItem);
        }
 /// <summary>
 /// Gets the menu items.
 /// </summary>
 /// <returns></returns>
 public virtual IReadOnlyCollection <MenuItemComponent> GetMenuItems()
 {
     return(SubItemElements.Select(
                item => pageObjectFactory.PrepareComponent(
                    new MenuItemComponent(
                        WrappedDriver.GetCssSelector(item),
                        pageObjectFactory,
                        WrappedDriver)))
            .ToList()
            .AsReadOnly());
 }
        /// <summary>
        /// Gets the menu item at the index.
        /// </summary>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        public virtual MenuItemComponent GetMenuItemAt(int index)
        {
            var menuItemEl = SubItemElements.ElementAt(index);
            var selector   = WrappedDriver.GetCssSelector(menuItemEl);

            return(pageObjectFactory.PrepareComponent(
                       new MenuItemComponent(
                           selector,
                           pageObjectFactory,
                           WrappedDriver)));
        }
        /// <summary>
        /// Gets the item.
        /// </summary>
        /// <param name="itemName">Name of the item.</param>
        /// <param name="stringComparison">The string comparison.</param>
        /// <returns></returns>
        public virtual MenuItemComponent GetItemByText(string itemName,
                                                       StringComparison stringComparison = StringComparison.Ordinal)
        {
            var el = FirstOrDefaultElement(itemName, true, stringComparison);

            if (el == null)
            {
                return(null);
            }
            else
            {
                return(pageObjectFactory.PrepareComponent(
                           new MenuItemComponent(
                               WrappedDriver.GetCssSelector(el),
                               pageObjectFactory,
                               WrappedDriver)));
            }
        }