Checkout our demo site to practice selenium https://magento.softwaretestingboard.com/

0 like 0 dislike
614 views
by Contributing Tester (51 points)
edited by
I have four classes which having different test cases so I want to run them parallel on different browsers.
So I am not able to run them parallel
So I am getting different exception every time.
If you guys I have any tutorial to achieve parallel testing or any solution that would be helpful for me.

I am attaching testng.xml code.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" thread-count="10" parallel="classes">
    <test name="ChromeTestCase">
        <parameter name="browser" value="chrome"></parameter>
        <classes>
            <class name="com.zoopla.qa.testcase.HomePageTest" />

            <class name="com.zoopla.qa.testcase.PropertyPageTest" />
            <class name="com.zoopla.qa.testcase.SalePageTest" />
            <class name="com.zoopla.qa.testcase.AgentDetailsPageTest" />
        </classes>
    </test>
    <test name="FirefoxTestCase">
        <parameter name="browser" value="FF"></parameter>
        <classes>
            <class name="com.zoopla.qa.testcase.HomePageTest" />

            <class name="com.zoopla.qa.testcase.PropertyPageTest" />
            <class name="com.zoopla.qa.testcase.SalePageTest" />
            <class name="com.zoopla.qa.testcase.AgentDetailsPageTest" />

        </classes>
    </test>
    <test name="IETestCase">
        <parameter name="browser" value="IE"></parameter>
        <classes>
            <class name="com.zoopla.qa.testcase.HomePageTest" />

            <class name="com.zoopla.qa.testcase.PropertyPageTest" />
            <class name="com.zoopla.qa.testcase.SalePageTest" />
            <class name="com.zoopla.qa.testcase.AgentDetailsPageTest" />

        </classes>
    </test>

</suite>



Below is my driver initialization class.

public class TestBase {

    public static WebDriver driver;

    public TestBase() throws IOException {

        OSName = System.getProperty("os.name");
        System.out.println(OSName);
        OSName = OSName.substring(0, 3);
        System.out.println(OSName);

        if (OSName.equalsIgnoreCase("Mac")) {
            prop = new Properties();
            System.out.println("If else");
            FileInputStream fis = new FileInputStream("./src/main/java/com/zoopla/qa/config/config.properties");
            prop.load(fis);
            System.out.println("prop loaded");

        } else if (OSName.equalsIgnoreCase("Win")) {
            System.out.println("In prop eles");
            prop = new Properties();
            FileInputStream fis = new FileInputStream(".\\src\\main\\java\\com\\zoopla\\qa\\config\\config.properties");
            prop.load(fis);
       
        }

    }

   
    public void initialization(String browserName) {

        //String browserName = prop.getProperty("browser");
        System.out.println("prop loaded" +browserName);
        if (browserName.equalsIgnoreCase("chrome")) {
            // System.setProperty("webdriver.chrome.driver", "./");
            WebDriverManager.chromedriver().setup();
            driver = new ChromeDriver();

        } else if (browserName.equalsIgnoreCase("FF")) {
               
            WebDriverManager.firefoxdriver().setup();
            driver = new FirefoxDriver();
            System.out.println("In prop eles loaded FF1");

        } else if (browserName.equalsIgnoreCase("IE")) {
            WebDriverManager.iedriver().setup();
            driver = new InternetExplorerDriver();
        } else {
            System.out.println("No browser");
        }

        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.get("https://www.zoopla.co.uk/");

    }
}
by Contributing Tester (99 points)
Can you edit your question and provide the class that starts your webdriver instance? I doubt that you have static webdriver. And when you are trying to run the class in parallel. All of them are trying to run using the same webdriver.
by Contributing Tester (51 points)
Ok, I am editing the question and yes I am using static web driver.
What is a solution for it?

1 Answer

0 like 0 dislike
by Contributing Tester (99 points)

If you are using static webdriver, you should not be using a static webdriver.

And, make sure that your webdriver is initiated and destroyed not at the class level. And you should pass the driver as a parameter to your function.

E.g.

import xyz.abc.*;

class myClass{
    static WebDriver driver;

    @BeforeTest
    public void init(){
        driver = new RemoteWebDriver();
    }
    @AfterTest 
    public void destroy(){
        driver.quit();
    }
    @Test
    public void myTest(){
        driver.get("https://www.google.com");
    }
}

//to enable parallel execution

public abstract class Base {
    @BeforeMethod
    public void _beforeTest(){
        driver = new FirefoxDriver();
        driver.navigate().to("http://localhost/");
    }
    @AfterMethod
    public void _afterTest(){
        try{
            driver.close();
        }catch(Exception ignore){
            
        }
        try{
            driver.quit();
        }catch(Exception ignore){
            
        }
    }
    
    protected WebDriver driver;
}

public class LoginTest extends Base {
    @Test
    public void sucessfullLoginTest(){
        Login login = new Login(driver);
        login.perform("qamate", "qamate");
        Assert.assertTrue(Dashboard.getWelcomeMessage(driver).getText().contains("Welcome"));
    }
    @Test
    public void rightUserNameWrongPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("qamate", "qamaet");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Invalid credentials"));
    }
    @Test
    public void rightUserNameBlankPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("qamate", "");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Password cannot be empty"));
    }
    @Test
    public void wrongUserNameRightPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("qamaet", "qamate");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Invalid credentials"));
    }
    @Test
    public void wrongUserNameWrongPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("qamaet", "qamet");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Invalid credentials"));
    }
    @Test
    public void wrongUserNameBlankPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("qamaet", "");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Password cannot be empty"));
    }
    
    @Test
    public void blankUserNameRightPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("", "qamate");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Username cannot be empty"));
    }
    @Test
    public void blankUserNameWrongPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("", "qamaet");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Username cannot be empty"));
    }
    @Test
    public void blankUserNameBlankPasswordLoginTest(){
        Login login = new Login(driver);
        login.perform("", "");
        Assert.assertTrue(HomePage.getErrorMessage(driver).getText().contains("Username cannot be empty"));
    }
}
 

You can go through this sample project, https://github.com/selenium-webdriver-software-testing/orangehrm-selenium-automation

by Contributing Tester (51 points)
Thanks,
  I try to implement the same and let you know whether it works or not.


This site is for software testing professionals, where you can ask all your questions and get answers from 1300+ masters of the profession. Click here to submit yours now!

...