BbJLeB

Untitled

Aug 18th, 2024
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.54 KB | None | 0 0
  1. using NUnit.Framework;
  2. using OpenQA.Selenium;
  3. using OpenQA.Selenium.Chrome;
  4. using OpenQA.Selenium.Interactions;
  5. using System;
  6. using System.Linq;
  7.  
  8. namespace Foody
  9. {
  10.     [TestFixture]
  11.     public class FoodyTests
  12.     {
  13.         protected IWebDriver driver;
  14.         private static readonly string BaseUrl = "http://softuni-qa-loadbalancer-2137572849.eu-north-1.elb.amazonaws.com:85/";
  15.         private static string? lastCreatedFoodTitle;
  16.         private static string? lastCreatedFoodDescription;
  17.         private Actions actions;
  18.  
  19.         [OneTimeSetUp]
  20.         public void OneTimeSetup()
  21.         {
  22.             driver = new ChromeDriver();
  23.             actions = new Actions(driver);
  24.             driver.Navigate().GoToUrl(BaseUrl);
  25.             driver.Manage().Window.Maximize();
  26.             driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
  27.             var loginBtn = driver.FindElement(By.LinkText("LOG IN"));
  28.             var chromeOptions = new ChromeOptions();
  29.             chromeOptions.AddArguments("--disable-search-engine-choice-screen");
  30.             chromeOptions.AddArgument("--incognito");
  31.             chromeOptions.AddArgument("--disable-save-password-popup");
  32.             chromeOptions.AddArgument("--no-first-run");
  33.             chromeOptions.AddArgument("--no-default-browser-check");
  34.             chromeOptions.AddArgument("--disable-popup-blocking");
  35.             chromeOptions.AddArgument("--disable-extensions");
  36.             chromeOptions.AddArgument("--disable-infobars");
  37.             chromeOptions.AddArgument("--disable-notifications");
  38.             chromeOptions.AddArgument("--start-maximized");
  39.             chromeOptions.AddArgument("--disable-default-apps");
  40.             chromeOptions.AddArgument("--incognito");
  41.  
  42.             // Scroll to the login button
  43.             actions.MoveToElement(loginBtn).Perform();
  44.  
  45.             // Click the login button
  46.             loginBtn.Click();
  47.  
  48.             // Fill in login details
  49.             driver.Navigate().GoToUrl("http://softuni-qa-loadbalancer-2137572849.eu-north-1.elb.amazonaws.com:85/");
  50.             driver.FindElement(By.LinkText("LOG IN")).Click();
  51.             driver.FindElement(By.Id("username")).SendKeys("DimitarIvanov");
  52.             driver.FindElement(By.Id("password")).SendKeys("123456");
  53.             driver.FindElement(By.CssSelector("button.btn.warning[type='submit']")).Click();
  54.         }
  55.  
  56.         [Test, Order(1)]
  57.         public void AddFoodWithInvalidDataTest()
  58.         {
  59.             var invalidTitleInput = "";
  60.  
  61.             driver.Navigate().GoToUrl($"{BaseUrl}/Food/Add");
  62.  
  63.             driver.FindElement(By.XPath("//input[@id='name']")).SendKeys(invalidTitleInput);
  64.  
  65.             var addButton = driver.FindElement(By.XPath("//button[@type='submit']"));
  66.             actions.ScrollToElement(addButton).Perform();
  67.             addButton.Click();
  68.  
  69.             var currentUrl = driver.Url;
  70.             Assert.That(currentUrl, Is.EqualTo($"{BaseUrl}/Food/Add"), "user should remain on the same page with same URL");
  71.  
  72.             var errorMessage = driver.FindElement(By.XPath("//li[contains(., 'Unable to add this food revue!')]"));
  73.  
  74.             Assert.That(errorMessage.Text.Trim(), Is.EqualTo("Unable to add this food revue!"), "The error message is not displayed as expected.");
  75.         }
  76.  
  77.         [Test, Order(2)]
  78.  
  79.         public void CreateRandomRevueTest()
  80.         {
  81.             lastCreatedFoodTitle = GenerateRandomString(4);
  82.             lastCreatedFoodDescription = GenerateRandomString(10);
  83.  
  84.             driver.Navigate().GoToUrl($"{BaseUrl}/Food/Add");
  85.  
  86.             driver.FindElement(By.Id("name")).SendKeys(lastCreatedFoodTitle);
  87.             driver.FindElement(By.Id("Description")).SendKeys(lastCreatedFoodDescription);
  88.             var btn = driver.FindElement(By.CssSelector(".btn"));
  89.             actions.MoveToElement(btn).Perform();
  90.             btn.Click();
  91.  
  92.             string currentUrl = driver.Url;
  93.             Assert.That(currentUrl, Is.EqualTo($"{BaseUrl}/"), "Browser do not navigate to the page");
  94.  
  95.             var lastFoodTitleElement = driver.FindElement(By.XPath("//"));
  96.  
  97.             string actualFoodTitle = lastFoodTitleElement.Text.Trim();
  98.             Assert.That(actualFoodTitle, Is.EqualTo(lastCreatedFoodTitle), "The last created food title does not match the expected value.");
  99.         }
  100.  
  101.         [Test, Order(3)]
  102.         public void AddFoodWithRandomTitleTest()
  103.         {
  104.             // Generate random movie title and description
  105.             lastCreatedFoodTitle = "Food: " + GenerateRandomString(5);
  106.             lastCreatedFoodDescription = "Food Description: " + GenerateRandomString(10);
  107.  
  108.             // Navigate to the Add Movie page
  109.             driver.Navigate().GoToUrl($"{BaseUrl}Catalog/Add");
  110.  
  111.             // Enter the movie title and description
  112.             driver.FindElement(By.CssSelector("input#Food")).SendKeys(lastCreatedFoodTitle);
  113.             driver.FindElement(By.CssSelector("textarea#Food")).SendKeys(lastCreatedFoodDescription);
  114.  
  115.             // Find and click the 'Add' button
  116.             var add = driver.FindElement(By.CssSelector("button.btn.warning[type='submit']"));
  117.             actions.MoveToElement(add).Perform();
  118.             add.Click();
  119.  
  120.             // Navigate to the last page of the movie listings
  121.             NavigateToLastPage();
  122.  
  123.             Assert.That(lastCreatedFoodTitle, Is.EqualTo(lastCreatedFoodTitle), "The last created food title does not match the expected value");
  124.         }
  125.  
  126.         [Test, Order(3)]
  127.         public void EditLastAddedFoodTest()
  128.         {
  129.             if (string.IsNullOrEmpty(lastCreatedFoodTitle))
  130.             {
  131.                 Console.WriteLine("No created foods available to edit.");
  132.                 return; // Прекратява теста, ако няма създадени храни
  133.             }
  134.  
  135.             driver.Navigate().GoToUrl(BaseUrl);
  136.  
  137.             var allFoods = driver.FindElements(By.XPath("//a[@class='btn btn-primary btn-xl rounded-pill mt-5'] [text()='Edit']"));
  138.             var lastFoodEditButton = allFoods.Last();
  139.  
  140.             Actions actions = new Actions(driver);
  141.             actions.MoveToElement(lastFoodEditButton).Click().Perform();
  142.  
  143.             var nameInput = driver.FindElement(By.XPath("//input[@id='name']"));
  144.             nameInput.Clear(); // Изчиства старото заглавие
  145.             nameInput.SendKeys($"{lastCreatedFoodTitle} + Edited");
  146.  
  147.             driver.FindElement(By.XPath("//button[@type='submit']")).Click();
  148.  
  149.             // Логика за асертиране, че заглавието не се е променило, както и съобщение в конзолата
  150.             Assert.That(lastCreatedFoodTitle, Is.Not.EqualTo($"{lastCreatedFoodTitle} + Edited"), "The title of the food was not changed.");
  151.             Assert.That(lastCreatedFoodTitle, Is.EqualTo(lastCreatedFoodTitle), "The title of the food was not changed.");
  152.             Console.WriteLine("Title change is not possible due to incomplete functionality");
  153.         }
  154.         [Test, Order(4)]
  155.  
  156.         public void SearchLastAddedFoodTest()
  157.         {
  158.             driver.Navigate().GoToUrl(BaseUrl);
  159.             var searchfield = driver.FindElement(By.XPath("//input[@type='search']"));
  160.             searchfield.Click();
  161.             searchfield.SendKeys(lastCreatedFoodTitle);
  162.             var searchbutton = driver.FindElement(By.XPath("//button[@type='submit']"));
  163.             var searchedfood = driver.FindElements(By.XPath("//h2[@class='display-4']"));
  164.  
  165.             var lastFoodTitle = searchedfood.Last().Text.Trim();
  166.             Assert.That(lastFoodTitle, Is.EqualTo(lastCreatedFoodTitle));
  167.  
  168.  
  169.         }
  170.         [Test, Order(5)]
  171.         //
  172.         public void DeleteLastAddedFoodTest()
  173.         {
  174.             driver.Navigate().GoToUrl(BaseUrl);
  175.             var allFoods = driver.FindElements(By.XPath("//a[@class='btn btn-primary btn-xl rounded-pill mt-5'] [text(🙁'Delete']"));
  176.             var allfoodcount = allFoods.Count();
  177.             var lastFoodDeleteButton = allFoods.Last();
  178.  
  179.             Assert.That(allfoodcount, Is.EqualTo(allFoods.Count() - 1));
  180.  
  181.         }
  182.         [Test, Order(6)]
  183.         public void Test_Search_For_Deleted_Food()
  184.         {
  185.             driver.Navigate().GoToUrl(BaseUrl);
  186.  
  187.             var searchField = driver.FindElement(By.XPath("//input[@type='search']"));
  188.             searchField.Click();
  189.             searchField.SendKeys(lastCreatedFoodTitle);
  190.             driver.FindElement(By.XPath("//button[@type='submit']")).Click();
  191.  
  192.             var searchResult = driver.FindElement(By.XPath("//h2[@class='display-4']"));
  193.             Assert.That(searchResult.Text, Is.EqualTo("There are no foods :("));
  194.  
  195.             var addButton = driver.FindElement(By.CssSelector("a.nav-link[href='/Food/Add']"));
  196.             Assert.True(addButton.Displayed);
  197.         }
  198.  
  199.  
  200.         [OneTimeTearDown]
  201.         public void OneTimeTearDown()
  202.         {
  203.             // Quit the driver after all tests are executed
  204.             driver.Quit();
  205.         }
  206.  
  207.         private string GenerateRandomString(int length)
  208.         {
  209.             // Generate a random string of specified length
  210.             const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  211.             var random = new Random();
  212.             return new string(Enumerable.Repeat(chars, length)
  213.               .Select(s => s[random.Next(s.Length)]).ToArray());
  214.         }
  215.  
  216.         private void NavigateToLastPage()
  217.         {
  218.             // Find the pagination elements to navigate to the last page
  219.             var paginationItems = driver.FindElements(By.CssSelector("ul.pagination li.page-item"));
  220.             var lastPageItem = paginationItems.Last();
  221.             actions.MoveToElement(lastPageItem).Perform();
  222.  
  223.             // Click the link of the actual last page
  224.             var lastPageLink = lastPageItem.FindElement(By.CssSelector("a.page-link"));
  225.             lastPageLink.Click();
  226.         }
  227.  
  228.         private void VerifyLastMovieTitle(string expectedTitle)
  229.         {
  230.             // Re-locate the movie elements on the last page
  231.             var movies = driver.FindElements(By.CssSelector(".col-lg-4"));
  232.             var lastMovieElement = movies.Last();
  233.             var lastMovieElementTitle = lastMovieElement.FindElement(By.CssSelector("h2"));
  234.  
  235.             // Verify that the last movie title matches the expected value
  236.             string actualMovieTitle = lastMovieElementTitle.Text.Trim();
  237.             Assert.That(actualMovieTitle, Is.EqualTo(expectedTitle), "The last movie title does not match the expected value.");
  238.         }
  239.     }
  240. }
  241.  
Advertisement
Add Comment
Please, Sign In to add comment