Untitled

 avatar
unknown
plain_text
3 months ago
10 kB
6
Indexable
using OpenQA.Selenium;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Keys = OpenQA.Selenium.Keys;

namespace SeleniumBase.PageObjects.MedCompass.CustomElements
{
    public class TimeInput<T> where T : class
    {
        private IWebDriver _driver { get; set; }
        private T _pageObject { get; set; }
        public IWebElement _componentElement { get; set; }
        private IWebElement _startingElement { get; set; }
        public By _locator { get; set; }

        private IWebElement _label
        {
            get { return _componentElement.FindElement(By.CssSelector("label")); }
        }
        private IWebElement _inputHour
        {
            get { return _componentElement.FindElement(By.XPath(".//input[contains(@placeholder,'hh')]")); }
        }
        private IWebElement _inputMinute
        {
            get { return _componentElement.FindElement(By.XPath(".//input[contains(@placeholder,'mm')]")); }
        }
        private IWebElement _inputSecond
        {
            get { return _componentElement.FindElement(By.XPath(".//input[contains(@placeholder,'ss')]")); }
        }
        private IWebElement _inputTimeofDay
        {
            get { return _componentElement.FindElement(By.XPath(".//input[contains(@placeholder,'--')]")); }
        }
        internal TimeInput(T page, IWebDriver driver)
        {
            _driver = driver;
            _pageObject = page;
        }
        internal TimeInput<T> SetProperties(By locator, IWebElement StartingElement = null)
        {
            _locator = locator;
            _startingElement = StartingElement;

            return this;
        }
        public TimeInput<T> GetElement()
        {
            if (_startingElement == null)
                _componentElement = _driver.FindElement(_locator);
            else
                _componentElement = _startingElement.FindElement(_locator);

            if (!(_componentElement.TagName == "app-time-input" || _componentElement.TagName == "app-time"))
                throw new Exception("Element found is not of type <app-time-input> !!!");

            return this;
        }
        public T Exists(out bool IsThere)
        {
            //GetElement();
            IsThere = false;
            TimeSpan originalWait = _driver.Manage().Timeouts().ImplicitWait;
            try
            {
                _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
                if (_startingElement == null)
                    _componentElement = _driver.FindElement(_locator);
                else
                    _componentElement = _startingElement.FindElement(_locator);
                IsThere = _componentElement.Displayed;
            }
            catch (NoSuchElementException)
            {
                IsThere = false;
            }
            finally
            {
                _driver.Manage().Timeouts().ImplicitWait = originalWait; // Setting the Implicit Wait back to the original value.
            }
            return _pageObject;
        }
        private string _errorValidationMessage
        {
            get { return _componentElement.FindElement(By.CssSelector("app-validation-errors")).FindElement(By.CssSelector("span")).Text; }
        }
        public T IsRequired(out bool isRequired)
        {
            GetElement();

            isRequired = _label.GetAttribute("class").Contains("required");
            return _pageObject;
        }
        public T Clear()
        {
            GetElement();
            _inputHour.ClearInputField(this._driver);
            _inputTimeofDay.ClearInputField(this._driver);
            _inputMinute.ClearInputField(this._driver);

            return _pageObject;
        }
        public T SetTime(DateTime? date)
        {
            GetElement();

            if (date == null)
                throw new Exception("Date to input is null!!!");

            string hour12 = date.Value.ToString("hh");
            string hour24 = date.Value.ToString("HH");
            string minute = date.Value.ToString("mm");
            string timeofday = date.Value.ToString("tt");

            TimeSpan originalWait = _driver.Manage().Timeouts().ImplicitWait;
            _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
            if (_componentElement.FindElements(By.XPath(".//input[contains(@placeholder,'--')]")).Count.Equals(1))
            {
                _inputHour.SendKeys(hour12);
                _inputMinute.SendKeys(minute);
                _inputTimeofDay.SendKeys(timeofday);
                _inputHour.SendKeys(Keys.Tab);
            }
            else
            {
                _inputHour.SendKeys(hour24);
                _inputMinute.SendKeys(minute);
                _inputHour.SendKeys(Keys.Tab);
            }

            _driver.Manage().Timeouts().ImplicitWait = originalWait;

            return _pageObject;
        }

        public T SetTimeWithSeconds(DateTime? date)
        {
            GetElement();

            if (date == null)
                throw new Exception("Date to input is null!!!");

            string hour = date.Value.ToString("hh");
            string minute = date.Value.ToString("mm");
            string second = date.Value.ToString("ss");
            string timeofday = date.Value.ToString("tt");

            _inputHour.SendKeys(hour);
            _inputMinute.SendKeys(minute);
            _inputSecond.SendKeys(second);
            _inputTimeofDay.SendKeys(timeofday);
            _inputHour.SendKeys(Keys.Tab);

            return _pageObject;
        }
        public T GetTime(out DateTime time)
        {
            GetElement();

            TimeSpan originalWait = _driver.Manage().Timeouts().ImplicitWait;
            _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);

            string timeString = "";
            var hour = _inputHour.GetAttribute("value");
            var minute = _inputMinute.GetAttribute("value");
            if (_componentElement.FindElements(By.XPath(".//input[contains(@placeholder,'--')]")).Count.Equals(1))
            {
                var timeofday = _inputTimeofDay.GetAttribute("value");
                timeString = $"{hour}:{minute} {timeofday}";
                time = DateTime.ParseExact(timeString, $"hh:mm tt", CultureInfo.InvariantCulture);
            }
            else
            {
                timeString = $"{hour}:{minute}";
                time = DateTime.ParseExact(timeString, $"HH:mm", CultureInfo.InvariantCulture);
            }

            _driver.Manage().Timeouts().ImplicitWait = originalWait;

            return _pageObject;
        }

        public DateTime GetTime()
        {
            GetElement();

            string timeString = "";
            var hour = _inputHour.GetAttribute("value");
            var minute = _inputMinute.GetAttribute("value");
            var timeofday = _inputTimeofDay.GetAttribute("value");
            timeString = $"{hour}:{minute} {timeofday}";

            return DateTime.ParseExact(timeString, $"hh:mm tt", CultureInfo.InvariantCulture);
        }

        public T GetTimeWithSeconds(out DateTime time)
        {
            GetElement();

            string timeString = "";
            var hour = _inputHour.GetAttribute("value");
            var minute = _inputMinute.GetAttribute("value");
            var second = _inputSecond.GetAttribute("value");
            var timeofday = _inputTimeofDay.GetAttribute("value");
            timeString = $"{hour}:{minute}:{second} {timeofday}";

            time = DateTime.ParseExact(timeString, $"hh:mm:ss tt", CultureInfo.InvariantCulture);

            return _pageObject;
        }

        public T TryGetTime(out DateTime time)
        {
            GetElement();

            string timeString = "";
            var hour = _inputHour.GetAttribute("value");
            var minute = _inputMinute.GetAttribute("value");
            var timeofday = _inputTimeofDay.GetAttribute("value");
            timeString = $"{hour}:{minute} {timeofday}";

            if (timeString == ": ")
            {
                time = new DateTime();
            }
            else
            {
                time = DateTime.ParseExact(timeString, $"hh:mm tt", CultureInfo.InvariantCulture);
            }

            return _pageObject;
        }

        public T IsTimeEmpty(out bool isTimeEmpty)
        {
            GetElement();

            var hour = _inputHour.GetAttribute("value");
            var minute = _inputMinute.GetAttribute("value");
            var timeofday = _inputTimeofDay.GetAttribute("value");
            string timeString = $"{hour}:{minute} {timeofday}";

            isTimeEmpty = timeString.Equals(": ");
            return _pageObject;
        }
        public T GetValidationErrorMessage(out string message)
        {
            GetElement();

            TimeSpan originalWait = _driver.Manage().Timeouts().ImplicitWait;
            try
            {
                _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
                message = _errorValidationMessage;
            }
            catch (NoSuchElementException)
            {
                message = string.Empty;
            }
            finally
            {
                _driver.Manage().Timeouts().ImplicitWait = originalWait; // Setting the Implicit Wait back to the original value.
            }

            return _pageObject;
        }
        public T IsEnabled(out bool isEnabled)
        {
            GetElement();
            isEnabled = _componentElement.FindElement(By.TagName("input")).Enabled;
            return _pageObject;
        }

        public bool IsEnabled()
        {
            GetElement();
            return _componentElement.FindElement(By.TagName("input")).Enabled;
        }

        public T GetLabel(out string label)
        {
            GetElement();

            label = _label.Text;
            return _pageObject;
        }
    }
}
Editor is loading...
Leave a Comment