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

0 like 0 dislike
1.4k views
by The go-to Tester (473 points)
If i run test cases separately  (one by one) then every thing running fine with correct result.

But if i try to run test cases parallel then data of test cases get mixed and all get failed.

I used testng.xml file in which i wrote 3 <test> with different name. And in this file itself i pass all parameteres separately.

I used one java class in which i wrote 5 @Test cases.
by
Can you post your JavaClass here? We will even need your BaseClass if you are using any. Basically, the class through which you are initiating variable to store data.
by The go-to Tester (473 points)
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" thread-count="3" parallel="tests">

  <test name="Firefox-en_US-Login Logout">
   <parameter name="sBrowser" value="Firefox"></parameter>
   <parameter name="sBaseUrl" value="http://www-ultimateresetuat.beachbody.com/shop/us/"></parameter>
   <parameter name="sPageUrl" value="b/ultimate-reset"></parameter>
   <parameter name="sLocal" value="en_US"></parameter>
   <parameter name="sEmail" value="[email protected]"></parameter>
   <parameter name="sPassword" value="12345"></parameter>
   <parameter name="sWelcome" value="onkarB"></parameter>
   <parameter name="sExpetMsgEmailMiss" value="Username not entered. This field is required"></parameter>
   <parameter name="sExpetMsgPasswordMiss" value="Password not entered. This field is required."></parameter>
   <classes>
      <class name="TestNG.LoginLogout2"/>
    </classes>
  </test> <!-- Test -->

  
  <test name="Firefox-en_CA-Login Logout">
   <parameter name="sBrowser" value="Firefox"></parameter>
   <parameter name="sBaseUrl" value="http://www-ultimateresetuat.beachbody.com/shop/ca/"></parameter>
   <parameter name="sPageUrl" value="b/ultimate-reset"></parameter>
   <parameter name="sLocal" value="en_CA"></parameter>
   <parameter name="sEmail" value="[email protected]"></parameter>
   <parameter name="sPassword" value="12345"></parameter>
   <parameter name="sWelcome" value="onkarCAB"></parameter>
   <parameter name="sExpetMsgEmailMiss" value="Username not entered. This field is required"></parameter>
   <parameter name="sExpetMsgPasswordMiss" value="Password not entered. This field is required."></parameter>
    <classes>
      <class name="TestNG.LoginLogout2"/>
    </classes>
  </test> <!-- Test -->
  
  
 <test name="Firefox-es_US-Login Logout">
   <parameter name="sBrowser" value="Firefox"></parameter>
    <parameter name="sBaseUrl" value="http://www-ultimateresetuat.beachbody.com/shop/us/"></parameter>
   <parameter name="sPageUrl" value="b/ultimate-reset"></parameter>
   <parameter name="sLocal" value="es_US"></parameter>
   <parameter name="sEmail" value="[email protected]"></parameter>
   <parameter name="sPassword" value="12345"></parameter>
   <parameter name="sWelcome" value="onkarB"></parameter>
   <parameter name="sExpetMsgEmailMiss" value="Ingresa una nombre de usuario válida."></parameter>
   <parameter name="sExpetMsgPasswordMiss" value="No se introdujo la contraseña. Este campo es obligatorio."></parameter>
    <classes>
      <class name="TestNG.LoginLogout2"/>
    </classes>
  </test> <!-- Test -->
  
</suite> <!-- Suite -->
by The go-to Tester (473 points)
package TestNG;

import java.util.List;
import org.apache.log4j.xml.DOMConfigurator;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Reporter;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import Pages.Browser;
import Pages.HomePage;
import Pages.LoginPage;




public class LoginLogout2 {
      static WebDriver driver;
      public static LoginPage pageLogin;
      public static HomePage pageHome;
      public static Browser specificBrowser;
      Actions builder;
      Action act;
      public static WebDriverWait wait;
      String timeInMilisecond="Test"+System.currentTimeMillis();
      
      public LoginLogout2() {
          pageLogin = new LoginPage(driver);
          pageHome = new HomePage(driver);
         // specificBrowser = new Browser(driver);
      }
      
      @BeforeTest(alwaysRun = true)
      @Parameters ({"sBrowser"})
      public void setUp(String browser) throws Exception {
         try {
             DOMConfigurator.configure("log4j.xml");
           
                Log.startTestCase("Registration");
               
               
                if(browser.equalsIgnoreCase("Firefox"))     //FIREFOX
                {
                    //driver = specificBrowser.firefox(driver);
                    driver = new FirefoxDriver();
                }
                if(browser.equalsIgnoreCase("Chrome"))      //CHROME
                {
                    driver = specificBrowser.chrome(driver);
                }
               
                if(browser.equalsIgnoreCase("IE"))          //INTERNET EXPLORER
                {
                    driver = specificBrowser.internetExplorer(driver);
                }
                wait = new WebDriverWait(driver, 120);
                driver.manage().window().maximize();
             
               
        } catch (Exception e) {
            Reporter.log(e.toString());
            Log.info(e.toString());
        }
        
      }
      
      
      @Test(priority=0,enabled=true)
      @Parameters ({"sBaseUrl","sPageUrl","sLocal","sEmail","sPassword","sWelcome"})
         public void existingUserloginLogout(String baseUrl,String pageUrl,String local,String email,String password,String welcomeMsg) throws Exception
         {
                pageHome.openHomePage(driver, baseUrl, pageUrl, local);
                pageHome.signINLink(driver, local);
                wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@id='loginForm']/input[4]"))));
               

                pageLogin.userNamePasswordField(driver,email, password);
                pageLogin.buttonSIGNIN(driver,local);
                pageLogin.verificationMsg(driver,welcomeMsg);   
               
                pageHome.signOUTLink(driver, local);           
                  pageHome.verificationMsg(driver, local);
                 
         }
      
      @Test(priority=1,dependsOnMethods={"existingUserloginLogout"})
      @Parameters ({"sBaseUrl","sPageUrl","sLocal","sEmail","sPassword","sWelcome","sExpetMsgEmailMiss"})
         public void blankUserName(String baseUrl,String pageUrl,String local,String email,String password,String welcomeMsg,String expectedMsg) throws Exception
         {
         pageLogin.openLoginPage(driver,baseUrl);
         pageLogin.userNamePasswordField(driver,"", password);
         pageLogin.buttonSIGNIN(driver,local);
         pageLogin.verificationMsg(driver,expectedMsg);     
         }
      
      @Test(priority=2,dependsOnMethods={"blankUserName"})
      @Parameters ({"sBaseUrl","sPageUrl","sLocal","sEmail","sPassword","sWelcome","sExpetMsgPasswordMiss"})
         public void blankPassword(String baseUrl,String pageUrl,String local,String email,String password,String welcomeMsg,String expectedMsg) throws Exception
         {
         pageLogin.openLoginPage(driver,baseUrl);
         pageLogin.userNamePasswordField(driver,email, "");
         pageLogin.buttonSIGNIN(driver,local);
         pageLogin.verificationMsg(driver,expectedMsg);     
         }
      
      @Test(priority=3,dependsOnMethods={"blankPassword"})
      @Parameters ({"sBaseUrl","sPageUrl","sLocal","sEmail","sPassword","sWelcome","sExpetMsgEmailMiss","sExpetMsgPasswordMiss"})
         public void blankEmailPassword(String baseUrl,String pageUrl,String local,String email,String password,String welcomeMsg,String missEmailMsg,String missPasswordlMsg) throws Exception
         {
         pageLogin.openLoginPage(driver,baseUrl);
         pageLogin.userNamePasswordField(driver,"","");
         pageLogin.buttonSIGNIN(driver,local);
         pageLogin.verificationMsg(driver,missEmailMsg);
         pageLogin.verificationMsg(driver,missPasswordlMsg);
         }
            
      @AfterTest(alwaysRun = true)
      @Parameters ({"sBrowser"})
      public void tearDown(String browser) throws Exception {
        Log.endTestCase("LoginLogout");
      //  Reporter.log("I am in "+browser);
       // driver.close();
        driver.quit();
        
      }
     
}
by The go-to Tester (473 points)
HomePage.java

package Pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.Reporter;

import TestNG.Log;
import Utilities.SpecialAction;

public class HomePage {

    static WebDriver driver;
    static String pageSource= null;
    //public static Object pageHome;
   
    public HomePage(WebDriver driver) {
        HomePage.driver = driver;
    }
   
    public void openHomePage(WebDriver driver,String baseUrl,String pageUrl,String local) throws InterruptedException {
        driver.get(baseUrl+pageUrl+"?locale="+local);   
        //LocalPopupPage.acceptlocalPopup(driver, local);
       
        if (local.equalsIgnoreCase("es_US")) {
            driver.navigate().refresh();
        }       
        if (ExpectedConditions.alertIsPresent()!= null) {
            //wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@id='simplePopup']/div/div[3]/a[1]"))));
            Thread.sleep(2000);
            driver.findElement(By.xpath("//*[@id='simplePopup']/div/div[3]/a[1]")).click();
        }
       
    }
   
    public void signINLink(WebDriver driver,String local) {
        if (local.equalsIgnoreCase("en_US")||local.equalsIgnoreCase("en_CA")) {
            driver.findElement(By.linkText("Sign In")).click();
        } else {
            driver.findElement(By.linkText("Iniciar sesión")).click();
        }
    }
   
    public  void signOUTLink(WebDriver driver,String local) throws InterruptedException {
        Actions builder = new Actions(driver);
          Action act= builder.moveToElement(driver.findElement(By.xpath("//*[@id='top-header']/div[2]/a[2]/span[1]"))).build();
          act.perform();
          Thread.sleep(2000);
         
          if (local.equalsIgnoreCase("en_US")||local.equalsIgnoreCase("en_CA")) {
            driver.findElement(By.linkText("Sign Out")).click();               
        } else {
            driver.findElement(By.linkText("Salir")).click();
        }
          Thread.sleep(2000);

          if (ExpectedConditions.alertIsPresent()!= null) {
              driver.switchTo().alert().accept();
              Thread.sleep(5000);
    }
    }
   
    public  void verificationMsg(WebDriver driver,String local) {
        if (local.equalsIgnoreCase("en_US")||local.equalsIgnoreCase("en_CA")) { //LOGOUT VERIFICATION CODE HERE
            driver.findElement(By.linkText("Sign In"));               
        } else {
            driver.findElement(By.linkText("Iniciar sesión"));
        }
                Reporter.log("2.User Correctly loggedOut on site");
                Log.info("2.User Correctly loggedOut on site");
    }

}
by The go-to Tester (473 points)
package Pages;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.Reporter;

import TestNG.Log;

public class LoginPage {

    static WebDriver driver;
    static String pageSource= null;
   
    public LoginPage(WebDriver driver) {
        //LoginPage.driver= driver;
    }
   
    public  void openLoginPage(WebDriver driver,String baseUrl) {
        System.out.println("in open URL");
        System.out.println(baseUrl+"login");
        driver.get(baseUrl+"login");
    }
   
    public void userNamePasswordField(WebDriver driver,String email,String password) {
        driver.findElement(By.id("email")).clear();
          driver.findElement(By.id("email")).sendKeys(email);
          driver.findElement(By.id("password")).clear();
        driver.findElement(By.id("password")).sendKeys(password);
    }
   
    public  void buttonSIGNIN(WebDriver driver,String local) {
        List<WebElement> inputButton= driver.findElements(By.tagName("input"));
        String buttonName =null;
        for (int i = 0; i < inputButton.size(); i++) {
            buttonName = inputButton.get(i).getAttribute("value");
            if (local.equalsIgnoreCase("en_US")||local.equalsIgnoreCase("en_CA")) {
                if (buttonName.equalsIgnoreCase("Sign In")) {
                    inputButton.get(i).click();
                    break;
                }                       
            } else {
                if (buttonName.equalsIgnoreCase("Ingresar")) {
                    inputButton.get(i).click();
                    break;
                }
            }
        }
    }
   
    public  void verificationMsg(WebDriver driver,String msg) {
        pageSource= driver.getPageSource();
        if (pageSource.contains(msg)) {
            Reporter.log("1.Test Case pass");
            Log.info("1.Test Case pass");
        } else {
            Reporter.log("1.Test Case FAIL");
            Log.info("1.Test Case FAIL");
        }
    }

}

1 Answer

0 like 0 dislike
by
selected by
 
Best answer

There are changes required in the way you have designed your tests.

  1. Don't define any variable, such as webdriver a static one. Because, while you declare something static, it will not allow you to do parallel execution.
  2. Initiate WebDriver and close the same in your @Test method. TestNG usually create only one instance of class and execute it in sequence. So, your method should not have any variable declared at class level or at base class level. Keep all your variable declaration and defination into the @Test method. Eg. WebDriver, browser.

So, your @Test method should look more like below.

@Test(priority=0,enabled=true)
@Parameters ({"sBrowser","sBaseUrl","sPageUrl","sLocal","sEmail","sPassword","sWelcome"})
public void existingUserloginLogout(String browser, String baseUrl,String pageUrl,String local,String email,String password,String welcomeMsg) throws Exception
         {
               WebDriver driver = specificBrowser.internetExplorer(driver);
               //Your rest of the code here...
                //pageHome.openHomePage(driver, baseUrl, pageUrl, local);
                //pageHome.signINLink(driver, local);
                //wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@id='loginForm']/input[4]"))));
                
 
                //pageLogin.userNamePasswordField(driver,email, password);
               // pageLogin.buttonSIGNIN(driver,local);
               // pageLogin.verificationMsg(driver,welcomeMsg);    
                
                //pageHome.signOUTLink(driver, local);            
                // pageHome.verificationMsg(driver, local);
 driver.quit();
                  
         }
 
Hope that helps!
 
by The go-to Tester (473 points)
Hi,
 As per your suggestion i just removed the key 'static' from Webdriver driver from main class only and every thing starts working with parallel running.

Thanks for your solution.....


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!

1.4k questions

1.6k answers

866 comments

1.9k users

...