/// <summary> /// CloseStoreLocatorPopupWindow clicks on close icon of doctors entry popup /// </summary> /// <param name="Driver">Initialized RemoteWebDriver instance</param> /// <param name="reporter"></param> public static void CloseStoreLocatorPopupWindow(RemoteWebDriver driver, Iteration reporter, string resultsPath) { try { reporter.Add(new Act("Close Store Locator Popup Window")); //Selenide.SwitchToDefaultContent(driver); //Selenide.SwitchToFrame(driver, Locator.Get(LocatorType.ID, "dlg_ifrm_search")); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); if (Selenide.IsElementExists(driver, Locator.Get(LocatorType.ID, "createmsgdiv"))) { CommonPage.AcceptErrorMessageIfPresent(driver, reporter, resultsPath); } //if (Selenide.IsElementExists(driver, Util.GetLocator("Cancel_btn"))) //{ // Selenide.Click(driver, Util.GetLocator("Cancel_btn")); //} if (Selenide.IsElementExists(driver, Util.GetLocator("StoreInfoCloseBtn_win"))) { Selenide.Click(driver, Util.GetLocator("StoreInfoCloseBtn_win")); } //CommonPage.WaitUntilSpinnerDisappears(driver); //CommonPage.AcceptOrDissmissAlertIfPresent(driver, reporter); //CommonPage.AcceptErrorMessageIfPresent(driver); Selenide.SwitchToDefaultContent(driver); } catch (Exception ex) { CommonPage.AcceptOrDissmissAlertIfPresent(driver, reporter); CommonPage.AcceptErrorMessageIfPresent(driver, reporter, resultsPath); } }
/// <summary> /// Performs login /// </summary> /// <param name="Driver">Initialized RemoteWebDriver instance</param> /// <param name="username">Login Username</param> /// <param name="password">Login Password</param> public static void Login(RemoteWebDriver driver, Iteration reporter, string username, string password) { try { reporter.Add(new Act(String.Format("Set Username {0}, Password {1} and Click Login", username, password))); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ID, "dlg_spinner")); Selenide.WaitForElementVisible(driver, Util.GetLocator("UserName_txt")); Selenide.SetText(driver, Util.GetLocator("UserName_txt"), Selenide.ControlType.Textbox, username); Selenide.WaitForElementVisible(driver, Util.GetLocator("Password_txt")); Selenide.SetText(driver, Util.GetLocator("Password_txt"), Selenide.ControlType.Textbox, password); Selenide.WaitForElementVisible(driver, Util.GetLocator("Login_btn")); Selenide.JS.Click(driver, Util.GetLocator("Login_btn")); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ID, "dlg_spinner")); System.Threading.Thread.Sleep(5000); } catch (Exception ex) { } }
/// <summary> /// SelectApplication method selects the application at login screen /// </summary> /// <param name="Driver">Initialized RemoteWebDriver instance</param> /// <param name="applicationName">Link Name</param> public static void SelectApplication(RemoteWebDriver driver, Iteration reporter, string applicationName) { reporter.Add(new Act(String.Format("Select the {0} link ", applicationName))); Selenide.SwitchToFrame(driver, Locator.Get(LocatorType.ID, "dlg_ifrm_modal2")); try { Actions action = new Actions(driver); IWebElement application = Selenide.GetElement(driver, Locator.Get(LocatorType.XPath, string.Format(@"//table[@id='tblSelect']/descendant::a[contains(@title,""{0}"")]/div", applicationName))); //Selenide.Click(driver,Locator.Get(LocatorType.XPath, string.Format(@"//table[@id='tblSelect']/descendant::a[contains(@title,""{0}"")]/div", applicationName))); //Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//table[@id='tblSelect']/descendant::a[contains(@title,'{0}')]/div", applicationName))); action.MoveToElement(application).Click().Build().Perform(); WaitForPageLoad(driver, 10); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); Selenide.SwitchToDefaultContent(driver); } catch (Exception ex) { throw new Exception(String.Format("{ 0 } link not found in the website", applicationName)); } }
/// <summary> /// ClickOnAnyStoreNumber method clicks on store number in the results /// </summary> /// <param name="driver"></param> /// <param name="reporter"></param> /// <param name="resultsPath"></param> public static void ClickOnAnyStoreNumber(RemoteWebDriver driver, Iteration reporter, string resultsPath) { try { reporter.Add(new Act("Click on store number in results of Stores Directory Page")); //Selenide.SwitchToFrame(driver, Locator.Get(LocatorType.ID, "iFrameSiteContents")); if (Selenide.IsElementExists(driver, Locator.Get(LocatorType.XPath, "//table[@class='formview']/descendant::tr[2]/td//a/nobr"))) { Selenide.Click(driver, Locator.Get(LocatorType.XPath, ("//table[@class='formview']/descendant::tr[2]/td//a/nobr"))); } else if (Selenide.IsElementExists(driver, Locator.Get(LocatorType.XPath, "//table[@class='formview']/descendant::tr[2]/td//a"))) { Selenide.Click(driver, Locator.Get(LocatorType.XPath, ("//table[@class='formview']/descendant::tr[2]/td//a"))); } else { reporter.Add(new Act("Results not found")); } Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); //WaitForPageLoad(driver, 10); //CommonPage.WaitUntilSpinnerDisappears(driver); CommonPage.AcceptOrDissmissAlertIfPresent(driver, reporter); CommonPage.AcceptErrorMessageIfPresent(driver, reporter, resultsPath); //Selenide.SwitchToFrame(driver,Locator.Get(LocatorType.ID, "dlg_ifrm_search")); Selenide.SwitchToDefaultContent(driver); } catch (SystemException sysex) { // this.Reporter.Chapter.Step.Action.Extra = sysex.Message + "<br/>" + sysex.StackTrace; // Reporter.Chapter.Step.Action.IsSuccess = false; CommonPage.AcceptOrDissmissAlertIfPresent(driver, reporter); CommonPage.AcceptErrorMessageIfPresent(driver, reporter, resultsPath); } }
/// <summary> /// ClickContentLinks method clicks the content links in the WebPortal /// </summary> /// <param name="driver"></param> /// <param name="reporter"></param> public static void ClickExternalApplicationMenus(RemoteWebDriver driver, Iteration reporter, string resultsPath) { int ExternalMenuCount, LinksCountInExternalMenu; bool IsExternalApplication; int NumberOfExternalMenu; int NumberOfSubmenuInExternalMenu; string LinkTextInExternalMenu; string ExternalMenuText; string submenu1 = string.Empty; //Checks for external application IsExternalApplication = Selenide.IsElementExists(driver, Locator.Get(LocatorType.XPath, "//div[@class='secmenu']/ul/li/a")); if (IsExternalApplication) { //Counts number of Menu's in external application NumberOfExternalMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, "//div[@class='secmenu']/ul/li/a")); for (ExternalMenuCount = 1; ExternalMenuCount <= NumberOfExternalMenu; ExternalMenuCount++) { //Clicks a menu in external application Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='secmenu']/ul/li[{0}]/a", ExternalMenuCount + 1))); Thread.Sleep(1000); ExternalMenuText = Selenide.GetText(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/a", ExternalMenuCount + 1)), Selenide.ControlType.Label); reporter.Add(new Act(string.Format(@"Click on <b>{0}</b> menu in the external application", ExternalMenuText))); Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='secmenu']/ul/li[{0}]/a", ExternalMenuCount + 1))); NumberOfSubmenuInExternalMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/ul/li", ExternalMenuCount + 1))); reporter.Add(new Act(string.Format (@"Menu count in each external application(Ex: SIM): <b>{0}</b>", NumberOfSubmenuInExternalMenu))); for (LinksCountInExternalMenu = 1; LinksCountInExternalMenu <= NumberOfSubmenuInExternalMenu; LinksCountInExternalMenu++) { Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/a", ExternalMenuCount + 1))); LinkTextInExternalMenu = Selenide.GetText(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/ul/li[{1}]", ExternalMenuCount + 1, LinksCountInExternalMenu)), Selenide.ControlType.Label); reporter.Add(new Act(string.Format (@"Click on " + "<b>" + "{0}" + "</b>" + " submenu In the external application", LinkTextInExternalMenu))); try { Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/a", ExternalMenuCount + 1))); Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='secmenu']/ul/li[{0}]/ul/li[{1}]/a", ExternalMenuCount + 1, LinksCountInExternalMenu))); AcceptOrDissmissAlertIfPresent(driver, reporter); AcceptErrorMessageIfPresent(driver); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner1_img")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner2_img")); CloseBrowserNewTab(driver); Selenide.Focus(driver, Locator.Get(LocatorType.XPath, string.Format(@"//td[@class='left']"))); //Thread.Sleep(1000); } catch (Exception ex) { reporter.Add(new Act(string.Format (@"Error found in external application menu link: <b>{0}</b>", LinkTextInExternalMenu))); CommonPage.TakeScreenShotAndAttachToReport(driver, LinkTextInExternalMenu, resultsPath, reporter); } } } } }
/// <summary> /// ClickAllSubMenusInMenu method click the links in each menu of WebPortal /// </summary> /// <param name="driver"></param> /// <param name="reporter"></param> /// <param name="tabName">tabName</param> /// <param name="resultsPath">resultsPath</param> /// public static void ClickAllSubMenusInMenu(RemoteWebDriver driver, Iteration reporter, string resultsPath, string menu) { string subMenu = string.Empty, subMenuAttribute = string.Empty; int linksCountInEachMenu, linksCountInSubMenu, subMenuCount, subMenuCountInEachMenu, clickableLinksInEachMenu, linksCountInSubMenu1 = 0; //Clicks menu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]", menu))); //Number of submenu's in a menu //subMenuCountInEachMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath,string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li", menu))); subMenuCountInEachMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[normalize-space(text())='{0}']/following-sibling::ul/li", menu))); //Number of clickable submenu's in a menu linksCountInEachMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li/a[@onclick]", menu))); //Number of clickable submenu2's in a menu linksCountInSubMenu = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li/a[@class='drop']/following-sibling::ul/li/a[@onclick]", menu))); //Total clickable links in a menu clickableLinksInEachMenu = linksCountInEachMenu + linksCountInSubMenu; reporter.Add(new Act(string.Format(@"Number of clickable links under <b>{0}</b> menu are: <b>{1}</b>", menu, clickableLinksInEachMenu))); for (subMenuCount = 1; subMenuCount <= subMenuCountInEachMenu; subMenuCount++) { subMenuAttribute = Selenide.GetElement(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a", menu, subMenuCount))).GetAttribute("onclick"); if (subMenuAttribute != null) { if (subMenuAttribute.Contains("PortalMenu") || subMenuAttribute.Contains("Schedule")) { subMenu = string.Empty; while (subMenu == null || subMenu == string.Empty) { //Clicks menu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]", menu))); subMenu = Selenide.GetText(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a", menu, subMenuCount)), Selenide.ControlType.Label); } reporter.Add(new Act(String.Format("Click submenu item <b>{0}</b> under <b>{1}</b> menu", subMenu, menu))); //Clicks submenu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a", menu, subMenuCount))); AcceptOrDissmissAlertIfPresent(driver, reporter); //Thread.Sleep(5000); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner1_img")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner2_img")); AcceptErrorMessageIfPresent(driver); if (Selenide.IsElementExists(driver, Util.GetLocator("Spinner1_img")) || Selenide.IsElementExists(driver, Util.GetLocator("Spinner2_img"))) { Thread.Sleep(5000); } //WaitUntilSpinnerDisappears(driver); CloseBrowserNewTab(driver); Selenide.Focus(driver, Locator.Get(LocatorType.XPath, string.Format(@"//td[@class='left']"))); //Clicks external applications ClickExternalApplicationMenus(driver, reporter, resultsPath); Thread.Sleep(500); } } if (subMenuAttribute == null) { string submenuname = string.Empty; while (submenuname == null || submenuname == string.Empty) { //Clicks menu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]", menu))); Thread.Sleep(250); submenuname = Selenide.GetText(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a/span", menu, subMenuCount)), Selenide.ControlType.Label); } reporter.Add(new Act(string.Format(@"Sub Menu Name is: <b>{0}</b>", submenuname))); //Clicks menu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format(@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]", menu))); //Clicks submenu1 Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a", menu, subMenuCount))); //Number of submenu2 in submenu1 linksCountInSubMenu1 = Selenide.GetElementCount(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/ul/li/a", menu, subMenuCount))); for (int eachSubLink = 1; eachSubLink <= linksCountInSubMenu1; eachSubLink++) { //Clicks menu Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]", menu))); //Clicks submenu1 Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/a", menu, subMenuCount))); string sublinkname = Selenide.GetText(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/ul/li[{2}]/a", menu, subMenuCount, eachSubLink)), Selenide.ControlType.Label); reporter.Add(new Act(String.Format ("Click submenu link " + "<b>" + "{0}" + "</b>" + " of " + "<b>" + "{1}" + "</b>" + " submenu under " + "<b>" + "{2}" + "</b>" + " menu", sublinkname, submenuname, menu))); //Clicks submenu2 Selenide.Click(driver, Locator.Get(LocatorType.XPath, string.Format (@"//div[@class='menu']/ul/li/a[contains(text(),'{0}')]/following-sibling::ul/li[{1}]/ul/li[{2}]/a", menu, subMenuCount, eachSubLink))); AcceptOrDissmissAlertIfPresent(driver, reporter); AcceptErrorMessageIfPresent(driver); Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.ClassName, "dlg_spinner")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner1_img")); Selenide.WaitForElementNotVisible(driver, Util.GetLocator("Spinner2_img")); WaitUntilSpinnerDisappears(driver); if (Selenide.IsElementExists(driver, Util.GetLocator("Spinner1_img")) || Selenide.IsElementExists(driver, Util.GetLocator("Spinner2_img"))) { Thread.Sleep(5000); } CloseBrowserNewTab(driver); ClickExternalApplicationMenus(driver, reporter, resultsPath); } } } }
/// <summary> /// WaitUntilSpinnerDisappears method waits until spinner disappers /// </summary> /// <param name="driver"></param> /// <param name="locator"></param> public static void WaitUntilSpinnerDisappears(RemoteWebDriver driver, string locator = null) { locator = !string.IsNullOrEmpty(locator) ? locator : "Spinner1_img"; Selenide.WaitForElementNotVisible(driver, Locator.Get(LocatorType.XPath, locator)); }