package com.smartapp.mobile.testcases; import java.io.File; import java.io.IOException; import java.net.URL; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Parameters; import io.appium.java_client.AppiumDriver; import io.appium.java_client.android.AndroidDriver; /** * * @author bmadhu * */ public class TestBase { protected static AppiumDriver driver=null; protected WebDriverWait wait = null; DesiredCapabilities capabilities = null; @Parameters({"appiumDriverPort","deviceName", }) @BeforeTest(alwaysRun = true) public void driverSetUp(String driverUrl,String device) throws Exception { capabilities = new DesiredCapabilities(); capabilities.setCapability("platformName","ANDROID" ); capabilities.setCapability("deviceName",device ); capabilities.setCapability("noReset", true); capabilities.setCapability("fullReset", false); capabilities.setCapability("autoGrantPermissions", true); capabilities.setCapability("clearSystemFiles", true); capabilities.setCapability("autoAcceptAlerts", true); capabilities.setCapability("autoWebviewTimeout", 30000); capabilities.setCapability("recreateChromeDriverSessions", true); capabilities.setCapability("recreateChromeDriverTimeout", 6000); capabilities.setCapability("appPackage","com.XXXXX.iqmobile"); capabilities.setCapability("appActivity", "com.XXXXXX.XXXXX.SplashActivity"); capabilities.setCapability("appWaitActivity", "com.XXXXX.XXXXX.IQMobile"); driver = new AndroidDriver(new URL("http://localhost:"+driverUrl+"/wd/hub"), capabilities); //driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS); } @AfterMethod public void captureScreenShots(ITestResult result) throws Exception { if(ITestResult.FAILURE == result.getStatus() || ITestResult.SKIP == result.getStatus()){ String destDir = ""; try{ if(ITestResult.FAILURE == result.getStatus()){ File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); String screenshotname = null; if(result.getParameters() != null && result.getParameters().length > 0){ screenshotname = (String)result.getParameters()[0]; }else{ screenshotname = result.getMethod().getMethodName(); } destDir = "screenshots/failed"; System.out.println("Screenshot captured"); new File(destDir).mkdirs(); String destFile = screenshotname+ ".png"; FileUtils.copyFile(scrFile, new File(destDir + "/" + destFile)); } }catch (IOException e) { e.printStackTrace(); System.out.println("Exception while taking screenshot "+e.getMessage()); } } driver.resetApp(); driver.getCapabilities(); Thread.sleep(10000); } @AfterTest public void tearDown() throws IOException, InterruptedException{ driver.quit(); } public static AppiumDriver getDriver(){ return driver; } } Test Scenarios: Step1: I have to run this scenario paralley in 6 devices with 6 different users Steps2: Login to application Step3: Choose any app zone central and Click on it Step4: verify the App zone is loaded or not /**************************************************/ package com.smartapp.mobile.testcases; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Factory; import org.testng.annotations.Test; import com.smartapp.mobile.helpers.CoreServices; import com.smartapp.mobile.helpers.DataProviderRepository; import com.smartapp.mobile.pages.AppsIntilizationPage; import com.smartapp.mobile.pages.BasePage; import com.smartapp.mobile.pages.ZoneCentralPage; public class VerifyZoneCentralLoading extends TestBase{ CoreServices coreServices; BasePage basePage; AppsIntilizationPage appsIntilizationPage; ZoneCentralPage zoneCentralPage; String usrName =""; String usrPwd =""; String zoneName =""; @Factory(dataProviderClass=DataProviderRepository.class,dataProvider="userLoginData") public VerifyZoneCentralLoading(String usrName,String usrPwd, String zoneName) { this.usrName = usrName; this.usrPwd = usrPwd; this.zoneName = zoneName; } @BeforeClass public void intiatePageObjects() throws Exception { driver = super.getDriver(); coreServices = new CoreServices(driver); basePage =new BasePage(driver); appsIntilizationPage =new AppsIntilizationPage(driver); zoneCentralPage = new ZoneCentralPage(driver); wait = new WebDriverWait(driver,90); Thread.sleep(8000); } @Test(description = "Zone central access with different user roles") public void zoneCentralLoadingPerformance() throws Exception { System.out.println("TestData:"+usrName+"--"+usrPwd+"--"+zoneName); boolean percentageflag = true; coreServices.switchContext(driver, "WEBVIEW_com.inquesttechnologies.iqmobile"); try { wait.until(ExpectedConditions.visibilityOf(basePage.loginButton)); }catch(Exception e1) {} basePage.userLogin(usrName, usrPwd); Thread.sleep(7000); try { coreServices.tapOnWebElement(driver, basePage.loginButton); }catch(Exception e) { } Thread.sleep(7000); wait.until(ExpectedConditions.visibilityOfAllElements(zoneCentralPage.appsZoneList)); zoneCentralPage.selectAppZone(zoneName); coreServices.switchContext(driver, "NATIVE_APP"); Thread.sleep(5000); try { wait.until(ExpectedConditions.invisibilityOf(appsIntilizationPage.appsLoadIntialProgressBar)); }catch(Exception e) {} while(percentageflag) { try { appsIntilizationPage.appsLoadingPerentage.isDisplayed(); } catch(Exception e) { percentageflag = false; try { Assert.assertTrue(appsIntilizationPage.appsLoadingAlertImg.isDisplayed()); coreServices.tapOnWebElement(driver, appsIntilizationPage.zoneRetryYesButton); }catch(Exception e1){} } } Thread.sleep(5000); Assert.assertTrue(zoneCentralPage.zoneCentralBackButton.isDisplayed(), "Zone central home screen is not displayed"); } } /********************************/