Backend/e-suite.Automation.UITests/ESuite.UI.E2E/Pages/BasicPage.cs
2026-01-20 21:50:10 +00:00

93 lines
5.6 KiB
C#

using ESuite.UI.E2E.Helpers;
using OpenQA.Selenium;
namespace ESuite.UI.E2E.Pages
{
public class BasicPage
{
private readonly IWebDriver driver;
public BasicPage(IWebDriver driver)
{
this.driver = driver;
}
public IWebDriver Driver => driver;
// Page elements
public static By NameField => By.CssSelector("input#name");
public static By SSOProvider => By.Id("ssoProviderId");
public static By AddressField => By.CssSelector("input#address");
public static By AddButton => By.XPath("//*[contains(@class,'btn-primary')][text()='Add']");
public static By SaveAndCloseButton => By.CssSelector("button.btn-primary[name='Save and close']:not([disabled])");
public static By SaveButton => By.CssSelector("button.btn-primary[name='Submit']:not([disabled])");
public static By ObjectNameInTable(string? name) => By.XPath($"//table[@class='table table-sm table-striped table-bordered']//*[contains(text(),'{name}')]");
public static By SearchInput => By.CssSelector("th input#name");
public static By SearchUsersInput => By.CssSelector("th input#displayName");
public static By DropdownTab(string title) => By.XPath($"//div[@class='leftMenuItemLabel'][text()='{title}']");
public static By DropdownOpened(string title) => By.XPath($"//div[@class='leftMenuItemLabel'][text()='{title}']/parent::div[contains(@class,'leftMenuSubMenuOpen')]/ancestor::div[@class='frame-leftMenu']//div[@class='subbar']");
public static By OpenedDropdown => By.XPath("//div[@class='dropdown-menu show']");
public static By SelectorByLabel(string? label) => By.XPath($"//label[text()='{label}']/following-sibling::select");
public static By AlertMessageEmptyFieldByName(string name) => By.XPath($"//div[@class='alert alert-danger'][text()='{name} is not allowed to be empty']");
public static By LoadingMessage => By.XPath("//div[text()='Loading']");
public static By AuditObjectButton(string objName) => By.XPath($"//td[text()='{objName}']/following-sibling::td//*[contains(@class, 'fa-book')]");
public static By EditObjectButton(string objName) => By.XPath($"//td[text()='{objName}']/following-sibling::td//*[contains(@class, 'fa-pen-to-square')]");
public static By DeleteObjectButton(string objName) => By.XPath($"//td[text()='{objName}']/following-sibling::td//*[contains(@class, 'fa-trash')]");
public static By DeleteOrganisationButton(string objName) => By.XPath($"//td/a[text()='{objName}']//ancestor::tr/td//*[contains(@class, 'fa-trash')]");
public static By EditOrganisationButton(string objName) => By.XPath($"//td/a[text()='{objName}']//ancestor::tr/td//*[contains(@class, 'fa-pen-to-square')]");
public static By EPrintInstanceButton(string objName) => By.XPath($"//td/a[text()='{objName}']");
public static By OrganisationButton(string objName) => By.XPath($"//td/a[text()='{objName}']");
public static By ConfirmDeletionButton => By.XPath("//button[text()='Press again to delete']");
public static By AuditMenuButton => By.XPath("//a[text()='Audit']");
public static By UserDropdownMenu => By.XPath("//div[contains(@class,'dropdown')]/a[text()='User']");
public static By UserDropdownMenuItem(string item) => By.XPath($"//div[@class='dropdown-menu show dropdown-menu-end']/a[contains(text(),'{item}')]");
public static By ToastWithMessage(string text) => By.XPath($"//div[@class='Toastify']//div[text()='{text}']");
public static By LoadingDropdownMessage => By.XPath("//option[@value='loading...']");
// Page actions
public static void ClickOnDropdownMenuItem(string menuItemName, string menuTitle = "Admin")
{
I.Click(DropdownTab(menuTitle));
I.WaitForElementVisibleAndClickable(DropdownOpened(menuTitle));
I.Click(By.XPath($"//div[@class='subbar']/a[text()='{menuItemName}']"));
I.WaitTillInvisible(DropdownOpened(menuTitle));
}
public static void SelectTab(string tabName)
{
By locator = By.XPath($"//ul[@class='tab-list']/li[contains(@class, 'tab-list-item')][text()='{tabName}']");
I.WaitForElementVisibleAndClickable(locator);
I.Click(locator);
}
// CK-Editor
public static By CKEditorTextBox => By.XPath("//div[contains(@class,'ck-editor__editable')][@role='textbox']");
public void FillCKEditorTextbox(string text)
{
IWebElement textbox = driver.FindElement(CKEditorTextBox);
textbox.SendKeys(Keys.Control + "a");
textbox.SendKeys(Keys.Delete);
I.FillField(CKEditorTextBox, text);
}
public static void SearchDeletedObjectNameInTableViaSearchInputField(string name)
{
I.FillField(SearchInput, name);
I.WaitTillInvisible(ObjectNameInTable(name));
}
public static void ClickOnDropdownUserMenuItem(string item)
{
I.Click(UserDropdownMenu);
I.Click(UserDropdownMenuItem(item));
I.WaitTillInvisible(UserDropdownMenuItem(item));
}
public static void SearchObjectNameInTableViaSearchInputField(string text, By? locator = null)
{
locator ??= SearchInput; // Use SearchInput if no locator is provided
I.Click(locator);
I.FillField(locator, text);
I.WaitForVisible(ObjectNameInTable(text));
}
}
}