How to run selenium webdriver test scripts parallel in more two environments using testng suite, testng has a feature by which we can create multiple instance of a single testng class file.
In below example, I created a selenium webdriver test script for google search. Which will run on two browsers firefox and IE.
package com.test;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class GoogleTest {
private WebDriver driver;
private String baseUrl;
@BeforeClass
@Parameters({ "browsertype"})
public void setUp(String browsertype) throws Exception {
if(browsertype.contains("IE")) {
File IEDriver = new File("IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", IEDriver.getAbsolutePath() );
driver = new InternetExplorerDriver();
}
else if(browsertype.contains("Firefox")){
driver = new FirefoxDriver();
}
baseUrl = "https://www.google.co.in/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@Test
public void testUntitled() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.id("gbqfq")).clear();
driver.findElement(By.id("gbqfq")).sendKeys("Testing");
driver.findElement(By.id("gbqfb")).click();
driver.findElement(By.id("ab_opt_icon")).click();
driver.findElement(By.cssSelector("#ab_as > div")).click();
driver.findElement(By.xpath("//input[@value='Advanced Search']")).click();
}
@AfterClass
public void tearDown() throws Exception {
driver.quit();
}
};
In this test I used dataprovider annotation of testng so need to pass “browsertype” variable from testng suite.xml file.
Here is testng suite.xml file. You should add “parallel="tests” attribute in suite tag, thread-count value more than 2. Add attribute “preserve-order="true” in test tag.
<suite annotations="JDK" name="Scenario1" parallel="tests" thread-count="2" verbose="1">
<test junit="false" name="Scenario1" preserve-order="true">
<parameter name="browsertype" value="Firefox">
<classes>
<class name="com.test.GoogleTest">
</class></classes>
</parameter></test>
<test junit="false" name="Scenario2" preserve-order="true">
<parameter name="browsertype" value="IE">
<classes>
<class name="com.test.GoogleTest">
</class></classes>
</parameter></test>
</suite>
In below example, I created a selenium webdriver test script for google search. Which will run on two browsers firefox and IE.
package com.test;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class GoogleTest {
private WebDriver driver;
private String baseUrl;
@BeforeClass
@Parameters({ "browsertype"})
public void setUp(String browsertype) throws Exception {
if(browsertype.contains("IE")) {
File IEDriver = new File("IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", IEDriver.getAbsolutePath() );
driver = new InternetExplorerDriver();
}
else if(browsertype.contains("Firefox")){
driver = new FirefoxDriver();
}
baseUrl = "https://www.google.co.in/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@Test
public void testUntitled() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.id("gbqfq")).clear();
driver.findElement(By.id("gbqfq")).sendKeys("Testing");
driver.findElement(By.id("gbqfb")).click();
driver.findElement(By.id("ab_opt_icon")).click();
driver.findElement(By.cssSelector("#ab_as > div")).click();
driver.findElement(By.xpath("//input[@value='Advanced Search']")).click();
}
@AfterClass
public void tearDown() throws Exception {
driver.quit();
}
};
In this test I used dataprovider annotation of testng so need to pass “browsertype” variable from testng suite.xml file.
Here is testng suite.xml file. You should add “parallel="tests” attribute in suite tag, thread-count value more than 2. Add attribute “preserve-order="true” in test tag.
<suite annotations="JDK" name="Scenario1" parallel="tests" thread-count="2" verbose="1">
<test junit="false" name="Scenario1" preserve-order="true">
<parameter name="browsertype" value="Firefox">
<classes>
<class name="com.test.GoogleTest">
</class></classes>
</parameter></test>
<test junit="false" name="Scenario2" preserve-order="true">
<parameter name="browsertype" value="IE">
<classes>
<class name="com.test.GoogleTest">
</class></classes>
</parameter></test>
</suite>
No comments:
Post a Comment