I am very new to Selenium, and for my current project, I had the task of creating the automated test scripts for our website. I am the only one on my team who had any experience with Selenium, but not any in depth experience. I also didn't have a lot of time to spend on this, as I had other work to do, so I didn't spend much time prior to writing the tests investigating Page Object Model.
I wrote tests that worked well, and they were code reviewed and I was told that they are looking good. However, I am almost certain that they could be made a lot better using some best practices for Selenium.
public class ProductRunThroughTests
{
private static ChromeDriver Driver = new ChromeDriver();
public void Go()
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3));
Driver.Manage().Window.Maximize();
Product1Sequence();
Driver.FindElementById("inner_product_box").Click();
Driver.Manage().Cookies.DeleteAllCookies();
Product2Sequence();
Driver.FindElementById("inner_product_box").Click();
Product1Sequence();
Driver.FindElementByName("Restart").Click();
if (Driver.FindElementsByTagName("a").ToList().Count() != 6)
Assert.Fail("Did not end on landing page");
Driver.Quit();
}
private void Product1Sequence()
{
Driver.Navigate().GoToUrl(ConfigurationManager.AppSettings["Host"]);
Driver.FindElementsByTagName("a").ToList()[0].Click();
#region Question 1
CheckBreadcrumbMenu(1);
ClickRadBtnByIndex(3);
#endregion
#region Question 2
CheckBreadcrumbMenu(2);
ClickRadBtnByIndex(1);
#endregion
#region Question 3
CheckBreadcrumbMenu(3);
ClickRadBtnByIndex(1);
#endregion
#region Question 4
CheckBreadcrumbMenu(4);
ClickRadBtnByIndex(0);
#endregion
#region Question 5
CheckBreadcrumbMenu(5);
MoveSlider(7, "left");
Driver.FindElementById("ForwardButton").Click();
#endregion
}
private void Product2Sequence()
{
Driver.Navigate().GoToUrl(ConfigurationManager.AppSettings["Host"]);
Driver.FindElementsByTagName("a").ToList()[0].Click();
#region Question 1
CheckBreadcrumbMenu(1);
ClickRadBtnByIndex(0);
#endregion
#region Question 2
CheckBreadcrumbMenu(2);
ClickRadBtnByIndex(0);
#endregion
#region Question 3
CheckBreadcrumbMenu(3);
ClickRadBtnByIndex(0);
#endregion
#region Question 4
CheckBreadcrumbMenu(4);
ClickRadBtnByIndex(1);
#endregion
#region Question 5
CheckBreadcrumbMenu(5);
Driver.FindElementById("ForwardButton").Click();
#endregion
}
private void ClickRadBtnByIndex(int index)
{
var tableRow = Driver.FindElementByTagName("tr");
List<IWebElement> radBtns = tableRow.FindElements(By.TagName("label")).ToList();
radBtns[index].Click();
Driver.FindElementById("ForwardButton").Click();
}
private void CheckBreadcrumbMenu(int CurrentQuestionNumber)
{
var breadcrumbDiv = Driver.FindElementById("rightCorner");
List<IWebElement> breadcrumbList = breadcrumbDiv.FindElements(By.TagName("li")).ToList();
if (breadcrumbList.Count != CurrentQuestionNumber)
{
Driver.Quit();
}
}
private void MoveSlider(int keyMovements, string sliderDirection)
{
Driver.FindElementById("slider").Click();
for (int i = 0; i < keyMovements; i++)
{
if (sliderDirection.Equals("left", StringComparison.InvariantCultureIgnoreCase))
Driver.Keyboard.SendKeys(Keys.ArrowLeft);
else if (sliderDirection.Equals("right", StringComparison.InvariantCultureIgnoreCase))
Driver.Keyboard.SendKeys(Keys.ArrowRight);
}
}
}
[TestClass]
public class Test
{
[TestMethod]
public void RunThroughWizard()
{
var c = new ProductRunThroughTests();
c.Go();
}
}