SELENIUM: Factory Annotation in TestNG:
1.@Factory allows tests to
be created at runtime depending on certain data-sets or conditions.
2.Sometimes we may need to run
a set of tests with different data values. To achieve this we may define a
separate set of tests inside a suite in the testng XML and test the required
scenario.
3.The problem with this approach
is that, if you get an extra set of data, you will need to redefine the test.
TestNG solves this problem by providing the @Factory annotation feature. Factory in TestNG defines and
creates tests dynamically at runtime.
4.A factory method is defined by
declaring @Factory above the respective test method. It’s mandatory
that a factory method should return an array of Object class (Object
[]).
5.One of the main advantage of using the
factory methods is that you can pass parameters to test classes while
initializing them. These parameters can then be used across all the test
methods present in the said classes.
package
com.rameshsoft.rameshselenium;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
public class FactoryDemo {
@Factory
public Object[] getValues()
{
Object[] obj=new
Object[3];
obj[0]=new
FactoryAnnotation("rameshsoft.selenium@gmail.com",
"*****");
obj[1]=new FactoryAnnotation("rameshatbtech@gmail.com","******");
obj[2]=new FactoryAnnotation("rameshatbtech
@gmail.com","******");
return obj;
/*
return new Object[]{new
FactoryAnnotation("rameshsoft.selenium@gmail.com",
"*****"),
new FactoryAnnotation("rameshatbtech@gmail.com
", "*****"),
new
FactoryAnnotation("rameshatbtech @gmail.com ","******")
};
*/
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
package
com.rameshsoft.rameshselenium;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import
org.openqa.selenium.firefox.FirefoxDriver;
import
org.testng.annotations.BeforeClass;
import
org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import
org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class FactoryAnnotation {
String uname;
String pwd;
public
FactoryAnnotation(String username,String password)
{
this.uname=username;
this.pwd=password;
System.out.println(uname);
System.out.println(pwd);
}
@BeforeClass
public
void beforeClass()
{
System.out.println("Before
class executing");
}
@BeforeSuite
public
void beforeSuite()
{
System.out.println("Before
Suite executing");
}
@BeforeTest
public
void beforeTest()
{
System.out.println("Before
Test executing");
}
@BeforeMethod
public
void beforeMethod()
{
System.out.println("Before
Method executing");
}
@Test
public
void execute() throws InterruptedException
{
System.out.println("user
name is: "+uname);
System.out.println("password
is : "+pwd);
System.setProperty("webdriver.gecko.driver",
"C:\\Users\\ramesh\\Desktop\\java\\desk\\geckodriver-v0.11.1-win64\\geckodriver.exe");
WebDriver
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS);
driver.get("https://www.gmail.com");
driver.findElement(By.id("Email")).sendKeys(uname);
driver.findElement(By.id("next")).click();
Thread.sleep(2000);
driver.findElement(By.id("Passwd")).sendKeys(pwd);
driver.findElement(By.id("signIn")).click();
driver.quit();
}
}
Note:Run FactoryDemo.java file
Output:
rameshsoft.selenium@gmail.com
*****
rameshatbtech@gmail.com
******
rameshatbtech @gmail.com
******
Before Suite executing
Before Test executing
Before class executing
Before Method executing
user name is: rameshsoft.selenium@gmail.com
password is : *****
Before class executing
Before Method executing
user name is: rameshatbtech @gmail.com
password is : ******
Before class executing
Before Method executing
user name is: rameshatbtech@gmail.com
password is : ******
No comments:
Post a Comment