Hi guys,
Breif: I have appium framework based on POM design patterns. I am unable to execute the testclasses as per what I have a requirement. Please do have a look on my implementation & suggest me some way to get out.
Problem: Second class is executing first instead of order which I have given.
Steps to reprdouce:
testng.xml-
<listeners>
<listener
class-name="com.automation.listeners.TestAllureListener" />
</listeners>
<test name="Asus MAX Pro M1 Device" preserve-order="true">
<!-- <parameter name="platformVersion" value="9.0" /> <parameter name="deviceName"
value="ASUS_X00TD" /> -->
<parameter name="platformName" value="Android" />
<parameter name="udid" value="J7AAGF009641EL4" />
<parameter name="url" value="http://0.0.0.0:4723/wd/hub" />
<classes>
<class name="com.automation.tests.HomePageTest" />
<class name="com.automation.tests.UserProfilePageTest" />
</classes>
</test>
<!-- <test name="Asus MAX Pro M2 Device" preserve-order="true"> <parameter
name="platformVersion" value="9.0" /> <parameter name="deviceName" value="ASUS_X00TD"
/> <parameter name="platformName" value="Android" /> <parameter name="udid"
value="JCAAGF0497053XA" /> <parameter name="url" value="http://0.0.0.0:4724/wd/hub"
/> <classes> <class name="com.automation.tests.HomePageTest" /> </classes>
</test> -->
Actual: It executes first “UserProfilePageTest” class
Expected: Execution order must be -
- HomePageTest
- UserProfilePageTest
HomepageTest Class-
package com.automation.tests;
import java.net.MalformedURLException;
import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.automation.base.BaseClass;
import com.automation.listeners.TestAllureListener;
import com.automation.pages.HomePage;
import com.automation.util.TestUtil;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
@Listeners({ TestAllureListener.class })
public class HomePageTest extends BaseClass {
HomePage homePage;
public HomePageTest() {
super();
}
@BeforeMethod
@Parameters({ "platformName", "url" ,"udid"})
public void setUpHomePageClass(String platformName, String url, String udid) throws MalformedURLException {
initialize_driver(platformName,url,udid);
homePage = new HomePage(driver);
}
@Test(priority = 1, description = "Verify Top50 Txt on homepage test")
@Severity(SeverityLevel.NORMAL)
@Description("TestCase Description: Verify Top50 Txt on homepage")
public void verifyUsernameOnHomePageTest() throws Exception {
TestUtil.waitForElementToBeClickable(By.id("continue_button"));
homePage.clickContinueBtnAfterSplashScreen();
log.info("***Executing verifyElementsOnHomeScreenTest***");
log.info("waitForUserNameToBeClickable - username");
TestUtil.waitForElementToBeClickable(By.id("user_name"));
boolean flag = homePage.validateTop50Txt();
Assert.assertTrue(flag);
log.info("Top50Txt isDisplayed");
log.info("verifyElementsonHomeScreenTest Ended");
}
/*
* @Test(priority = 2, description = "Swipe to next video test")
*
* @Severity(SeverityLevel.NORMAL)
*
* @Description("TestCase Description: Swipe from one video to another") public
* void swipeToNxtVideoTest() throws InterruptedException { try {
* log.info("***Executing swipeToNxtVideoTest***");
* log.info("waitForElementToPresenceOfElementLocated - username");
* TestUtil.waitForElementToPresenceOfElementLocated(By.id("user_name"));
* log.info("swipeverticalDown for nxt video"); TestUtil.swipeverticalDown();
* log.info("getUserNamefromHomeScreen"); String userName =
* homePage.getUserNamefromHomePage(); System.out.println("UserName: " +
* userName);
* log.info("waitForElementToPresenceOfElementLocated - send_coin_text");
* TestUtil.waitForElementToPresenceOfElementLocated(By.id("send_coin_text"));
* log.info("swipeToNxtVideoTest Ended"); } catch (Exception e) {
* e.printStackTrace(); log.error("Found Exception - swipeToNxtVideoTest"); } }
*/
/*
* @Test(priority = 3, retryAnalyzer =
* com.automation.listeners.RetryAnalyzer.class ) public void checkFailure() {
* Assert.assertEquals(true, false); System.out.println("failed");
*
* }
*/
@AfterMethod
public void tearDown() {
driver.quit();
/*
* // stop appium server appiumService.stop();
*/
}
}
UserProfilePageTest Class:
public class UserProfilePageTest extends BaseClass {
UserProfilePage userProfilePage;
HomePage homePage;
public UserProfilePageTest() {
super();
}
@BeforeMethod
@Parameters({"platformName","url","udid"})
public void setUpUserProfileClass(String platformName, String url, String udid) throws MalformedURLException {
initialize_driver(platformName,url,udid);
userProfilePage = new UserProfilePage(driver);
homePage = new HomePage(driver);
}
@Test
public void validateUserNameOnProfilePageTest() {
try {
//homePage.clickContinueBtnAfterSplashScreen();
log.info("*** Executing validateUserNameOnProfilePageTest***");
log.info("waitForElementToBeClickable - user_name ");
TestUtil.waitForElementToBeClickable(By.id("user_name"));
log.info("getUserNamefromHomeScreen");
String usernameOnHomeScreeen = homePage.getUserNamefromHomePage();
userProfilePage = homePage.clickUserName();
log.info("getUserNameOnUserProfile");
String usernameOnProfile = userProfilePage.getUserNameOnUserProfile();
Assert.assertEquals(usernameOnHomeScreeen, usernameOnProfile);
log.info("Assertion passed - username");
log.info("clickOnBackBtn");
userProfilePage.clickOnBackBtn();
boolean flag = userProfilePage.verifySendCoinsTxt();
Assert.assertTrue(flag);
log.info("Assertion Passed - SendCoinsTxt is displayed");
log.info("validateuserNameOnProfilePageTest");
} catch (Exception e) {
e.printStackTrace();
log.error("Found exception - validateUserNameOnProfilePageTest ");
}
}
@AfterMethod
public void tearDown() {
driver.quit();
// stop appium server
// appiumService.stop();
}
}
Description - In every test class, i have implemented before each testcase instantiate appium driver with following parameters then execution of test will happen & followed by quit the driver after each testcase