public static By First <T>()
            where T : IWebElement
        {
            string xPath = "";

            foreach (var expr in DOMElementXPathFactory.Get <T>())
            {
                xPath += string.Format(".//{0} | ", expr);
            }
            xPath = "(" + xPath.TrimEnd(' ', '|') + ")[1]";
            return(OpenQA.Selenium.By.XPath(xPath));
        }
        private static IList <T> GetByXPath <T>(ISearchContext context)
            where T : WebElement, new()
        {
            string xPath = "";
            string start = ".//";

            foreach (var expr in DOMElementXPathFactory.Get <T>())
            {
                xPath += string.Format("{1}{0} | ", expr, start);
            }
            xPath = "(" + xPath.TrimEnd(' ', '|') + ")";
            Func <IWebElement, T> create = WebElement.Create <T>;


            return(context.FindElements(OpenQA.Selenium.By.XPath(xPath)).Select(create).ToList());
        }