public void LoginAsPm_AssignTicket_TicketAssigned()
        {
            // Arrange
            var email    = "*****@*****.**";
            var password = "******";

            // Act
            HelperMethods.LoginUser(WebDriver, Url, email, password);

            // Assert - Verify there are no Notifications
            var unreadNotifcationsCount = WebDriver.FindElement(By.Id("unread-notify-count"));

            Assert.AreEqual("0", unreadNotifcationsCount.Text);
            Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));

            // Arrange
            email    = "*****@*****.**";
            password = "******";

            // Act
            HelperMethods.LoginUser(WebDriver, Url, email, password);

            // Assert
            var actualUrl = WebDriver.Url;

            actualUrl = actualUrl.Trim(new[] { '/' });
            Assert.AreEqual(ExpectedLoggedInUrl, actualUrl);

            // Assert My Projects has at least one item
            Assert.AreEqual(1, WebDriver.FindElements(By.Id("myProjects")).Count);
            IWebElement myProjectsLink = WebDriver.FindElement(By.Id("myProjects"));

            string expectedUrlEnd = "/Projects/AssignedIndex";
            int    retryCount     = 3;

            do
            {
                myProjectsLink.Click();
                Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));
                actualUrl = WebDriver.Url;
                actualUrl = actualUrl.Trim(new[] { '/' });
            } while (!actualUrl.Contains("/Projects/AssignedIndex") && retryCount-- > 0);

            Assert.IsTrue(actualUrl.EndsWith(expectedUrlEnd));

            Assert.IsTrue(WebDriver.FindElements(By.TagName("td")).Count > 0);
            bool        testProjectExists = false;
            string      projectTitle      = "Testing Only";
            IWebElement testProjectLink   = null;

            foreach (var td in WebDriver.FindElements(By.TagName("td")))
            {
                if (td.Text.Contains(projectTitle))
                {
                    testProjectExists = true;
                    testProjectLink   = td.FindElement(By.TagName("a"));
                    break;
                }
            }

            // Go to Project Details Page
            Assert.IsTrue(testProjectExists);
            testProjectLink.Click();
            Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));
            actualUrl = WebDriver.Url;
            actualUrl = actualUrl.Trim(new[] { '/' });

            Assert.IsTrue(actualUrl.Contains("/Projects/Details/"));

            // Find the First Unassigned Ticket and Assign it to [email protected]
            Assert.IsTrue(WebDriver.FindElements(By.TagName("tr")).Count > 0);

            IWebElement editLink = null;

            foreach (var tr in WebDriver.FindElements(By.TagName("tr")))
            {
                if (tr.FindElements(By.TagName("th")).Count > 0)
                {
                    var assigneeColHeader = tr.FindElements(By.TagName("th"))[3];
                    assigneeColHeader.Click();
                    Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));
                    break;
                }
            }
            foreach (var tr in WebDriver.FindElements(By.TagName("tr")))
            {
                if (tr.FindElements(By.TagName("td")).Count == 0)
                {
                    continue;
                }
                var assignee = tr.FindElements(By.TagName("td"))[3];
                if (String.IsNullOrWhiteSpace(assignee.Text))
                {
                    var tdWithActions = tr.FindElements(By.TagName("td"))[9];
                    editLink = tdWithActions.FindElements(By.TagName("a"))[0];
                    break;
                }
            }
            Assert.IsNotNull(editLink, "Could not find an Un-assigned Ticket");
            editLink.Click();
            Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));

            // Ticket Edit Page
            actualUrl = WebDriver.Url;
            actualUrl = actualUrl.Trim(new[] { '/' });
            Assert.IsTrue(actualUrl.Contains("/Tickets/Edit/"));

            Assert.AreEqual(1, WebDriver.FindElements(By.Id("AssignedToId")).Count);
            var assignedTo = WebDriver.FindElement(By.Id("AssignedToId"));

            assignedTo.Click();
            assignedTo.SendKeys(Keys.ArrowDown);
            assignedTo.SendKeys(Environment.NewLine);

            Assert.AreEqual(1, WebDriver.FindElements(By.XPath("//input[@type='submit']")).Count);
            var submitButton = WebDriver.FindElement(By.XPath("//input[@type='submit']"));

            submitButton.Click();

            actualUrl = WebDriver.Url;
            actualUrl = actualUrl.Trim(new[] { '/' });
            Assert.IsTrue(actualUrl.Contains("/Tickets/Edit/"));

            // Arrange
            email    = "*****@*****.**";
            password = "******";

            // Act
            HelperMethods.LoginUser(WebDriver, Url, email, password);
            Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));

            // Assert Dev now has a Notification
            unreadNotifcationsCount = WebDriver.FindElement(By.Id("unread-notify-count"));
            Assert.AreEqual("1", unreadNotifcationsCount.Text);

            unreadNotifcationsCount.Click();
            Assert.IsTrue(WebDriver.FindElements(By.XPath("//button[@type='submit']/*/div[@class='small text-gray-500']")).Count > 0);
            var notification = WebDriver.FindElement(By.XPath("//button[@type='submit']/*/div[@class='small text-gray-500']"));

            notification.Click();

            Thread.Sleep(TimeSpan.FromMilliseconds(SleepMs));
            unreadNotifcationsCount = WebDriver.FindElement(By.Id("unread-notify-count"));
            Assert.AreEqual("0", unreadNotifcationsCount.Text);
        }