Reputation: 400
I have a multiple Test class which I want to execute 4 tests, however, the 4 tests I want to execute are different classes in different class files. So I want to call each class 1 at a time in my multiple Test class. So The code is being executed in the individual classes and the multiple Test class literally just handles the execution of each test based on priority. I am just unsure how to call another class to be executed.
My multi class:
@Test(priority = 0) //Set Priority of Test - Priority of test always starts from Zero
public void one() {
System.out.println("This is Test Case 1");
}
//Test 2
@Test(priority = 1) // Test priority 1
public void Two(){
System.out.println("This is Test Case 2");
}
I need to execute my external classes in the @Test blocks. New to automation maybe my problem is my understand of java?
How am Passing My parameters:
public class TestNGDataProvider {
private WebDriver driver;
private static Logger logger1 = LogManager.getLogger("Logger1");
@Test(dataProvider = "Authentication")
public void testMethod1(String sUsername, String sPassword, String sMemorableWord) {
DOMConfigurator.configure("log4j.xml");
driver = new FirefoxDriver();
logger1.info("New Instance of firefox created");
//Add wait to allow web elements to load
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
logger1.info("Timeout Applied for 10 seconds to Allow Load of Elements");
//Launch FireFoxDriver - Open WebPage
driver.get("http://localhost/2010A15/");
logger1.info("Website Launched");
Reporter.log("Website Lauched Successfully | "); //Main Event Logger/Report
//Find Login Element
driver.findElement(By.id("WEB_LoginButton")).click();
logger1.info("Login Button Clicked");
//Find User name Element
driver.findElement(By.id("dijit_form_ValidationTextBox_1")).sendKeys(sUsername);
logger1.info("Username Entered");
//Find Password Element
driver.findElement(By.id("dijit_form_ValidationTextBox_2")).sendKeys(sPassword);
@DataProvider(name = "Authentication")
public static Object[][] credentials() {
return new Object[][] { { "[email protected]", "password1", "smith" }, { "[email protected]", "password1", "smith" }, { "[email protected]", "password1", "smith" }};
}}
Upvotes: 0
Views: 3770
Reputation: 836
As per my understanding, you have handled test logic in separate class files & executing those in Main class file. So if you have below 2 classes for tests,
public class TestLogic1
{
public void testMethod1()
{
System.out.println("Test 1 executing");
}
}
public class TestLogic2
{
public void testMethod2()
{
System.out.println("Test 2 executing");
}
}
Then you can call, these test methods in your execution class as,
public class TestExecute
{
TestLogic1 method1=new TestLogic1();
TestLogic2 method2=new TestLogic2();
@Test(priority=1)
public void test1()
{
method1.testMethod1();
}
@Test(priority=2)
public void test2()
{
method2.testMethod2();
}
}
Edit: Assuming you have written @Test method & @DataProvider in one class & handling it's execution sequence in other class. Use below code to get it working with parameters from DataProvider.
public class TestExecute{
TestNGDataProvider tg=new TestNGDataProvider();
@Test(dataProvider = "Authentication",dataProviderClass = TestNGDataProvider.class)
public void test1(String login,String user,String pass) throws InterruptedException {
tg.testMethod1(login,user,pass);
}
}
Hope this is what you are looking for. Also look here For more details on TestNG Data Providers.
Upvotes: 1