public static void NavigateTo <T>(IWebDriver driver, BasePage <T> page, object parameter) where T : class, IWebPage
        {
            Stack <IWebPage> pages  = new Stack <IWebPage>();
            IWebPage         myPage = page;

            do
            {
                pages.Push(myPage);
                myPage = myPage.FromPage();
            } while (myPage != null);

            while (pages.Count > 0)
            {
                var p        = pages.Pop();
                var tempPage = p.FromPage();
                if (tempPage != null)
                {
                    tempPage.Parameter = parameter;
                    tempPage.Driver    = driver;
                }
                driver.WaitPageLoad();
                p.Parameter = parameter;
                p.Driver    = driver;
                p.Navigate(tempPage);
                TimeWait.Default.Until(() => switchPage(driver, p));
            }
        }
 private static bool switchPage(IWebDriver driver, IWebPage page)
 {
     if (page.FromPage() == null)
     {
         return(true);
     }
     if (driver.WindowHandles.Count == 1)
     {
         return(true);
     }
     foreach (var window in driver.WindowHandles)
     {
         driver.SwitchTo().Window(window);
         if (page.IsNavigate())
         {
             return(true);
         }
     }
     return(false);
 }