Friday, June 16, 2023

parallel execute of chrome in c#

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace FacebookLoginTests
{
    [TestFixture]
    public class LoginTests
    {
        private ChromeDriver[] drivers;

        [OneTimeSetUp]
        public void Setup()
        {
            drivers = new ChromeDriver[4];

            // Start four Chrome instances
            for (int i = 0; i < 4; i++)
            {
                ChromeOptions options = new ChromeOptions();
                drivers[i] = new ChromeDriver(options);
            }
        }

        [OneTimeTearDown]
        public void Cleanup()
        {
            // Quit all Chrome instances
            foreach (var driver in drivers)
            {
                driver.Quit();
            }
        }

        [TestCaseSource(nameof(UserCredentialsData))]
        public void LoginTest(UserCredentials credentials)
        {
            Parallel.ForEach(drivers, (driver) =>
            {
                driver.Navigate().GoToUrl("https://www.facebook.com");
                LoginPage loginPage = new LoginPage(driver);
                HomePage homePage = loginPage.Login(credentials.Username, credentials.Password);

                // Assert the login was successful
                Assert.IsTrue(homePage.IsLoggedIn());
            });
        }

        private static IEnumerable<UserCredentials> UserCredentialsData()
        {
            // Define usernames and passwords
            yield return new UserCredentials("username1", "password1");
            yield return new UserCredentials("username2", "password2");
            yield return new UserCredentials("username3", "password3");
            yield return new UserCredentials("username4", "password4");
        }
    }

    // Data Model

    public class UserCredentials
    {
        public string Username { get; set; }
        public string Password { get; set; }

        public UserCredentials(string username, string password)
        {
            Username = username;
            Password = password;
        }
    }

    // Page Object Model (POM) classes

    public class LoginPage
    {
        private IWebDriver driver;
        private By emailInput = By.Id("email");
        private By passwordInput = By.Id("pass");
        private By loginButton = By.Id("loginbutton");

        public LoginPage(IWebDriver driver)
        {
            this.driver = driver;
        }

        public HomePage Login(string username, string password)
        {
            driver.FindElement(emailInput).SendKeys(username);
            driver.FindElement(passwordInput).SendKeys(password);
            driver.FindElement(loginButton).Click();

            return new HomePage(driver);
        }
    }

    public class HomePage
    {
        private IWebDriver driver;
        private By profileLink = By.XPath("//a[@title='Profile']");

        public HomePage(IWebDriver driver)
        {
            this.driver = driver;
        }

        public bool IsLoggedIn()
        {
            return driver.FindElement(profileLink).Displayed;
        }
    }
}

No comments:

Post a Comment