Browse Source

add new testCases. prepare the test to have them into categories

purigarcia 10 năm trước cách đây
mục cha
commit
a52fc94244
21 tập tin đã thay đổi với 385 bổ sung148 xóa
  1. 3 2
      automationTest/.gitignore
  2. 0 4
      automationTest/.settings/org.eclipse.core.resources.prefs
  3. 1 1
      automationTest/pom.xml
  4. 14 3
      automationTest/src/test/java/androidtest/actions/Actions.java
  5. 9 0
      automationTest/src/test/java/androidtest/models/ElementMenuOptions.java
  6. 5 4
      automationTest/src/test/java/androidtest/models/LoginForm.java
  7. 21 1
      automationTest/src/test/java/androidtest/models/MainView.java
  8. 2 2
      automationTest/src/test/java/androidtest/models/NewFolderPopUp.java
  9. 29 10
      automationTest/src/test/java/androidtest/models/SettingsView.java
  10. 41 18
      automationTest/src/test/java/androidtest/tests/Common.java
  11. 10 19
      automationTest/src/test/java/androidtest/tests/Config.java
  12. 19 5
      automationTest/src/test/java/androidtest/tests/CreateFolderTestSuite.java
  13. 20 6
      automationTest/src/test/java/androidtest/tests/DeleteFileTestSuite.java
  14. 19 5
      automationTest/src/test/java/androidtest/tests/DeleteFolderTestSuite.java
  15. 31 19
      automationTest/src/test/java/androidtest/tests/LoginTestSuite.java
  16. 20 5
      automationTest/src/test/java/androidtest/tests/LogoutTestSuite.java
  17. 22 9
      automationTest/src/test/java/androidtest/tests/MoveFileTestSuite.java
  18. 24 9
      automationTest/src/test/java/androidtest/tests/MoveFolderTestSuite.java
  19. 21 8
      automationTest/src/test/java/androidtest/tests/RenameFileTestSuite.java
  20. 21 6
      automationTest/src/test/java/androidtest/tests/RenameFolderTestSuite.java
  21. 53 12
      automationTest/src/test/java/androidtest/tests/UploadTestSuite.java

+ 3 - 2
automationTest/.gitignore

@@ -1,2 +1,3 @@
-/target/
-src/test/java/androidtest/tests/Config.java
+
+target/
+ScreenShots/

+ 0 - 4
automationTest/.settings/org.eclipse.core.resources.prefs

@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding//src/test/java=UTF-8
-encoding/<project>=UTF-8

+ 1 - 1
automationTest/pom.xml

@@ -56,7 +56,7 @@
     <dependency>
         <groupId>io.appium</groupId>
         <artifactId>java-client</artifactId>
-        <version>2.1.0</version>
+        <version>2.2.0</version>
     </dependency>
     <dependency>
         <groupId>commons-lang</groupId>

+ 14 - 3
automationTest/src/test/java/androidtest/actions/Actions.java

@@ -3,6 +3,7 @@ package androidtest.actions;
 import java.util.HashMap;
 
 import org.openqa.selenium.NoSuchElementException;
+import org.openqa.selenium.ScreenOrientation;
 import org.openqa.selenium.remote.RemoteWebElement;
 
 import io.appium.java_client.android.AndroidDriver;
@@ -29,10 +30,18 @@ public class Actions {
 		LoginForm loginForm = new LoginForm(driver);
 		CertificatePopUp certificatePopUp = loginForm.typeHostUrl(url);	
 		if(!isTrusted){
-			driver.runAppInBackground(3);
 			WebDriverWait wait = new WebDriverWait(driver, 30);
-			wait.until(ExpectedConditions.visibilityOf(certificatePopUp.getOkButtonElement()));
-			certificatePopUp.clickOnOkButton();
+			//sometimes the certificate has been already accept and it doesn't appear again
+			try {
+				wait.until(ExpectedConditions.visibilityOf(certificatePopUp.getOkButtonElement()));
+				//we need to repaint the screen because of some element are misplaced
+				driver.rotate(ScreenOrientation.LANDSCAPE);
+				driver.rotate(ScreenOrientation.PORTRAIT);
+				certificatePopUp.clickOnOkButton();
+			}catch (NoSuchElementException e) {
+
+			}
+
 		}
 		loginForm.typeUserName(user);
 		loginForm.typePassword(password);
@@ -87,6 +96,8 @@ public class Actions {
 		AndroidElement fileElement;
 		WaitAMomentPopUp waitAMomentPopUp;
 		try{
+			//To open directly the "file list view" and we don't need to know in which view we are
+			driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
 			fileElement = (AndroidElement) driver.findElementByName(elementName);
 			ElementMenuOptions menuOptions = mainView.longPressOnElement(elementName);
 			RemoveConfirmationView removeConfirmationView = menuOptions.clickOnRemove();;

+ 9 - 0
automationTest/src/test/java/androidtest/models/ElementMenuOptions.java

@@ -11,6 +11,9 @@ public class ElementMenuOptions {
 
 	final AndroidDriver driver;
 	
+	@AndroidFindBy(name = "Share link")
+	private AndroidElement shareLinkElement;
+	
 	@AndroidFindBy(name = "Details")
 	private AndroidElement detailsFileElement;
 	
@@ -52,4 +55,10 @@ public class ElementMenuOptions {
 		NewFolderPopUp newFolderPopUp = new NewFolderPopUp(driver);
 		return newFolderPopUp;
 	}
+	
+	public ShareView clickOnShareLinkElement () {
+		shareLinkElement.click();
+		ShareView shareView = new ShareView(driver);
+		return shareView;
+	}
 }

+ 5 - 4
automationTest/src/test/java/androidtest/models/LoginForm.java

@@ -51,14 +51,15 @@ public class LoginForm {
 	
 	public void typeUserName (String userName) {
 		userNameInput.clear();
-		userNameInput.sendKeys(userName);
-		driver.hideKeyboard();
+		//using the \n , it not need to hide the keyboard which sometimes gives problems
+		userNameInput.sendKeys(userName + "\n");
+		//driver.hideKeyboard();
 	}
 	
 	public void typePassword (String password) {
 		passwordInput.clear();
-		passwordInput.sendKeys(password);
-		driver.hideKeyboard();
+		passwordInput.sendKeys(password + "\n");
+		//driver.hideKeyboard();
 	}
 	
 	public MainView clickOnConnectButton () {

+ 21 - 1
automationTest/src/test/java/androidtest/models/MainView.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.android.AndroidKeyCode;
 import io.appium.java_client.pagefactory.AndroidFindBy;
 import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 
@@ -11,6 +12,7 @@ import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
 
+import org.openqa.selenium.Point;
 import androidtest.actions.Actions;
 
 public class MainView {
@@ -49,6 +51,10 @@ public class MainView {
 	@AndroidFindBy(name = "Files")
 	private AndroidElement filesElementUploadFile;
 	
+	@CacheLookup
+	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"List Layout\")")
+	private AndroidElement listLayout;
+	
 	private AndroidElement fileElement;
 	
 	private AndroidElement fileElementLayout;
@@ -63,7 +69,12 @@ public class MainView {
 	}
 
 	public MenuList clickOnMenuButton () {
-		menuButton.click();
+		//if the menu option is not in the actionBar, it is opening again
+		try {
+			menuButton.click();
+		} catch (NoSuchElementException e){
+			driver.sendKeyEvent(AndroidKeyCode.MENU);
+		}
 		MenuList menuList = new MenuList (driver);
 		return menuList;
 	}
@@ -93,6 +104,10 @@ public class MainView {
 		return titleText;
 	}
 	
+	public AndroidElement getUploadButton () {
+		return uploadButton;
+	}
+	
 	public AndroidElement getWaitAMomentTextElement () {
 		return waitAMomentText;
 	}
@@ -141,6 +156,11 @@ public class MainView {
 	public static String getFavoriteFileIndicator() {
 		return favoriteFileIndicator;
 	}
+	
+	public void pulldownToRefresh () throws InterruptedException {
+		Point listLocation = listLayout.getLocation();
+		driver.swipe(listLocation.getX(),listLocation.getY(), listLocation.getX(),listLocation.getY()+1000, 5000);
+	}
 
 
 }

+ 2 - 2
automationTest/src/test/java/androidtest/models/NewFolderPopUp.java

@@ -24,8 +24,8 @@ public class NewFolderPopUp {
 		
 	public void typeNewFolderName (String newFolderName) {
 		newFolderNameField.clear();
-		newFolderNameField.sendKeys(newFolderName);
-		driver.hideKeyboard();
+		newFolderNameField.sendKeys(newFolderName + "\n");
+		//driver.hideKeyboard();
 	}
 
 	public WaitAMomentPopUp clickOnNewFolderOkButton () {

+ 29 - 10
automationTest/src/test/java/androidtest/models/SettingsView.java

@@ -12,24 +12,27 @@ import androidtest.tests.Config;
 
 public class SettingsView {
 	final AndroidDriver driver;
-	
+
 	@CacheLookup
 	@AndroidFindBy(name = Config.userAccount)
 	private AndroidElement accountElement;
-	
+
 	@CacheLookup
 	@AndroidFindBy(name = Config.userAccount2)
 	private AndroidElement accountElement2;
-	
+
 	@AndroidFindBy(name = "Delete account")
 	private AndroidElement deleteAccountElement;
-	
+
 	@AndroidFindBy(name = "Change password")
 	private AndroidElement changePasswordElement;
-	
+
 	@AndroidFindBy(name = "Add account")
 	private AndroidElement addAccountElement;
-	
+
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.CheckBox\").index(0)")
+	private AndroidElement passcodeCheckbox;
+
 	public SettingsView (AndroidDriver driver) {
 		this.driver = driver;
 		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
@@ -38,22 +41,38 @@ public class SettingsView {
 	public void tapOnAccountElement (int fingers, int milliSeconds) {
 		accountElement.tap(fingers, milliSeconds);
 	}
-	
-	
+
+
 	public void tapOnAddAccount (int fingers, int milliSeconds) {
 		addAccountElement.tap(fingers, milliSeconds);
 	}
-	
+
 	public LoginForm clickOnDeleteAccountElement () {
 		deleteAccountElement.click();
 		LoginForm loginForm = new LoginForm(driver);
 		return loginForm;
 	}
-	
+
 	public LoginForm clickOnChangePasswordElement () {
 		changePasswordElement.click();
 		LoginForm loginForm = new LoginForm(driver);
 		return loginForm;
 	}
+
+	public PassCodeView EnablePassCode(){
+		if(!passcodeCheckbox.isSelected()){
+			passcodeCheckbox.click();
+		}
+		PassCodeView passcodeview = new PassCodeView(driver);
+		return passcodeview;
+	}
 	
+	public PassCodeView DisablePassCode(){
+		if(passcodeCheckbox.isSelected()){
+			passcodeCheckbox.click();
+		}
+		PassCodeView passcodeview = new PassCodeView(driver);
+		return passcodeview;
+	}
+
 }

+ 41 - 18
automationTest/src/test/java/androidtest/tests/Common.java

@@ -1,5 +1,6 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -7,45 +8,41 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.commons.io.FileUtils;
 import org.openqa.selenium.By;
 import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.OutputType;
 import org.openqa.selenium.TimeoutException;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.remote.Augmenter;
 import org.openqa.selenium.remote.DesiredCapabilities;
 import org.openqa.selenium.remote.RemoteWebDriver;
 import org.openqa.selenium.support.ui.WebDriverWait;
-
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
-import junit.framework.TestCase;
 
-public class Common extends TestCase{
+public class Common{
 	AndroidDriver driver;
 	static int waitingTime = 30;
-	
+
 	WebDriverWait wait;
-	
-	protected void setUpCommonDriver () throws Exception {
+
+	protected AndroidDriver setUpCommonDriver () throws Exception {
 		File rootPath = new File(System.getProperty("user.dir"));
 		File appDir = new File(rootPath,"src/test/resources");
 		File app = new File(appDir,"ownCloud.apk");
 		DesiredCapabilities capabilities = new DesiredCapabilities();
 		capabilities.setCapability("platformName", "Android");
-		capabilities.setCapability("deviceName", "Device");
+		capabilities.setCapability("deviceName", "test");
 		capabilities.setCapability("app", app.getAbsolutePath());
-		capabilities.setCapability("app-package", "com.owncloud.android");
-		capabilities.setCapability("app-activity", ".ui.activity.FileDisplayActivity");	
+		capabilities.setCapability("appPackage", "com.owncloud.android");
+		capabilities.setCapability("appActivity", ".ui.activity.FileDisplayActivity");	
 		capabilities.setCapability("appWaitActivity", ".authentication.AuthenticatorActivity");
 		driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 		driver.manage().timeouts().implicitlyWait(waitingTime, TimeUnit.SECONDS);
 		wait = new WebDriverWait(driver, waitingTime, 50);
+		return driver;
 
 	}
-	
+
 	protected boolean waitForTextPresent(String text, AndroidElement element) throws InterruptedException{
 		for (int second = 0;;second++){	
 			if (second >= waitingTime)
@@ -54,13 +51,13 @@ public class Common extends TestCase{
 				if (text.equals(element.getText()))
 					break;
 			} catch (Exception e){
-				
+
 			}
 			Thread.sleep(1000);
 		}
 		return true;
 	}
-	
+
 	protected boolean isElementPresent(AndroidElement element, By by) {
 		try {
 			element.findElement(by);
@@ -69,7 +66,7 @@ public class Common extends TestCase{
 			return false;
 		}
 	}
-	
+
 	protected boolean isElementPresent(AndroidElement element) {
 		try{
 			element.isDisplayed();
@@ -78,7 +75,7 @@ public class Common extends TestCase{
 		}
 		return true;
 	}
-	
+
 	//pollingTime in milliseconds
 	public static void waitTillElementIsNotPresent (AndroidElement element, int pollingTime) throws Exception {
 		for (int time = 0;;time += pollingTime){	
@@ -93,7 +90,7 @@ public class Common extends TestCase{
 		}
 		throw new TimeoutException();
 	}
-	
+
 	protected void takeScreenShotOnFailed (String testName) throws IOException {
 		File file  = ((RemoteWebDriver) driver).getScreenshotAs(OutputType.FILE);
 		SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
@@ -102,4 +99,30 @@ public class Common extends TestCase{
 		FileUtils.copyFile(file, new File(screenShotName));
 	}
 
+	protected void assertIsInMainView() throws InterruptedException {
+		assertTrue(waitForTextPresent("ownCloud", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
+		assertTrue(isElementPresent((AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().description(\"Upload\")")));	
+	}
+
+	protected void assertIsNotInMainView() throws InterruptedException {
+		AndroidElement fileElement;
+		assertTrue(waitForTextPresent("ownCloud", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
+		try {
+			fileElement = (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().description(\"Upload\")");
+		} catch (NoSuchElementException e) {
+			fileElement = null;
+		}
+		assertNull(fileElement);
+	}
+	
+	protected void assertIsPasscodeRequestView() throws InterruptedException {
+		assertTrue(waitForTextPresent("ownCloud", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
+		assertTrue(((AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Please, insert your pass code\")")).isDisplayed());
+
+	}
+
+	protected void assertIsInSettingsView() throws InterruptedException {
+		assertTrue(waitForTextPresent("Settings", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
+	}
+
 }

+ 10 - 19
automationTest/src/test/java/androidtest/tests/Config.java

@@ -1,29 +1,20 @@
 package androidtest.tests;
 
 public final class Config {
-	
-	public static final String server = "owncloudServerVar";
-	public static final Boolean hasResource = false;
-	public static String URL = GetURl(server, hasResource, "resourceServerVar");
+
+	//without http or https
+	public static final String URL = "owncloudServerVar";
 	public static boolean isTrusted = true;
-	
-	public static final String server2 = "owncloudServer2Var";
-	public static final Boolean hasResource2 = false;
-	public static String URL2 = GetURl(server2, hasResource2, "resourceServerVar");
+
+	//without http or https
+	public static final String URL2 = "owncloudServer2Var";
 	public static boolean isTrusted2 = true;
-	
+
 	public static final String user = "owncloudUserVar";
 	public static final String password = "owncloudPasswordVar";
 	public static final String user2 = "owncloudUser2Var";
 	public static final String password2 = "owncloudPassword2Var";
-	public static final String userAccount = user + "@"+ server;
-	public static final String userAccount2 = user2 + "@"+ server2;
-	
-	public static String GetURl(String server, Boolean hasSubdirectory, String serverResource){
-		if(hasSubdirectory){
-			return server + serverResource;
-		}else{
-			return server;
-		}
-	}
+	public static final String userAccount = user + "@"+ URL;
+	public static final String userAccount2 = user2 + "@"+ URL2;
+
 }

+ 19 - 5
automationTest/src/test/java/androidtest/tests/CreateFolderTestSuite.java

@@ -1,40 +1,54 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.MainView;
 import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class CreateFolderTestSuite extends Common{
+public class CreateFolderTestSuite{
 	
+	AndroidDriver driver;
+	Common common;
 	private Boolean folderHasBeenCreated = false;
 	private final String FOLDER_NAME = "testCreateFolder";
 	private String CurrentCreatedFolder = "";
+	
+	@Rule public TestName name = new TestName();
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testCreateNewFolder () throws Exception {
 		String NEW_FOLDER_NAME = "testCreateFolder";
 
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 
 		//check if the folder already exists and if true, delete them
 		Actions.deleteElement(NEW_FOLDER_NAME, mainView, driver);
 
 		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(NEW_FOLDER_NAME, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_NAME);
 		assertNotNull(mainView.getFileElement());
 		assertTrue(folderHasBeenCreated=mainView.getFileElement().isDisplayed());	
@@ -44,7 +58,7 @@ public class CreateFolderTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		if (folderHasBeenCreated) {
 			MainView mainView = new MainView(driver);
 			Actions.deleteElement(CurrentCreatedFolder, mainView, driver);

+ 20 - 6
automationTest/src/test/java/androidtest/tests/DeleteFileTestSuite.java

@@ -1,7 +1,13 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -9,30 +15,38 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.MainView;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class DeleteFileTestSuite extends Common{
+public class DeleteFileTestSuite{
 	
+	AndroidDriver driver;
+	Common common;
 	private final String FILE_NAME = "test";
 	
+	@Rule public TestName name = new TestName();
+	
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testDeleteFile () throws Exception {		
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		waitForTextPresent("ownCloud", mainView.getTitleTextElement());
+		common.assertIsInMainView();
 		
 		//TODO. if the file already exists, do not upload
 		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
 		
 		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
+		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
 		
 		Actions.deleteElement(FILE_NAME,mainViewAfterUploadFile, driver);
 		assertFalse(mainViewAfterUploadFile.getFileElement().isDisplayed());
@@ -40,7 +54,7 @@ public class DeleteFileTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		driver.removeApp("com.owncloud.android");
 		driver.quit();
 	}

+ 19 - 5
automationTest/src/test/java/androidtest/tests/DeleteFolderTestSuite.java

@@ -1,36 +1,50 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.MainView;
 import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class DeleteFolderTestSuite extends Common{
+public class DeleteFolderTestSuite{
+	AndroidDriver driver;
+	Common common;
 	private Boolean folderHasBeenCreated = false;
 	private final String FOLDER_NAME = "testCreateFolder";
+	
+	@Rule public TestName name = new TestName();
 
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testDeleteFolder () throws Exception {
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		waitForTextPresent("ownCloud", mainView.getTitleTextElement());
+		common.assertIsInMainView();
 		
 		//TODO. if the folder already exists, do no created
 		//create the folder
 		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(FOLDER_NAME, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_NAME);
 		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());
 
@@ -41,7 +55,7 @@ public class DeleteFolderTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		if(folderHasBeenCreated){
 			MainView mainView = new MainView(driver);
 			Actions.deleteElement(FOLDER_NAME, mainView, driver);

+ 31 - 19
automationTest/src/test/java/androidtest/tests/LoginTestSuite.java

@@ -1,65 +1,76 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.openqa.selenium.ScreenOrientation;
 import androidtest.actions.Actions;
+import androidtest.groups.*;
 import androidtest.models.LoginForm;
 import androidtest.models.MainView;
 import androidtest.models.MenuList;
 import androidtest.models.SettingsView;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class LoginTestSuite extends Common{
-
+public class LoginTestSuite{
+	AndroidDriver driver;
+	Common common;
+	
+	@Rule public TestName name = new TestName();
+	
 	@Before
 	public void setUp() throws Exception {
-			setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 	
 	@Test
+	@Category({NoIgnoreTestCategory.class})
 	public void test1LoginPortrait () throws Exception {
 		driver.rotate(ScreenOrientation.PORTRAIT);
 		
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 	}
 	
 	@Test
+	@Category({NoIgnoreTestCategory.class})
 	public void test2LoginLandscape () throws Exception {
 		driver.rotate(ScreenOrientation.LANDSCAPE);
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
-		//TO DO. detect in which view is. it can be files view or settings view
+		common.assertIsInMainView();
 	}
 	
 	
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void test3MultiAccountRotate () throws Exception {
 		driver.rotate(ScreenOrientation.LANDSCAPE);
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 		
 		driver.rotate(ScreenOrientation.PORTRAIT);
 		MenuList menu = mainView.clickOnMenuButton();
 		SettingsView settingsView = menu.clickOnSettingsButton();
+		
 		settingsView.tapOnAddAccount(1, 1000);
 		mainView = Actions.login(Config.URL2, Config.user2,Config.password2, Config.isTrusted2, driver);
-		
-		assertTrue(waitForTextPresent("Settings", mainView.getTitleTextElement()));
-		//TO DO. detect in which view is. it can be files view or settings view
-		//Actions.deleteAccount(mainView);
-		//TO DO. Delete the second user
+		common.assertIsInSettingsView();
 	}
 	
 	@Test
+	@Category({NoIgnoreTestCategory.class})
 	public void test4ExistingAccountRotate () throws Exception {
 		driver.rotate(ScreenOrientation.PORTRAIT);
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 		
 		driver.rotate(ScreenOrientation.LANDSCAPE);
 		MenuList menu = mainView.clickOnMenuButton();
@@ -68,27 +79,28 @@ public class LoginTestSuite extends Common{
 		
 		LoginForm loginForm = new LoginForm(driver);
 		mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);	
-		assertTrue(waitForTextPresent("An account for the same user and server already exists in the device", loginForm.getAuthStatusText()));
+		assertTrue(common.waitForTextPresent("An account for the same user and server already exists in the device", loginForm.getAuthStatusText()));
 	}
 	
-
+	@Test
+	@Category({NoIgnoreTestCategory.class})
 	public void test5ChangePasswordWrong () throws Exception {
-
+		driver.rotate(ScreenOrientation.PORTRAIT);
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 		MenuList menu = mainView.clickOnMenuButton();
 		SettingsView settingsView = menu.clickOnSettingsButton();
 		settingsView.tapOnAccountElement(1, 1000);
 		LoginForm changePasswordForm = settingsView.clickOnChangePasswordElement();
 		changePasswordForm.typePassword("WrongPassword");
 		changePasswordForm.clickOnConnectButton();
-		assertTrue(waitForTextPresent("Wrong username or password", changePasswordForm.getAuthStatusText()));
+		assertTrue(common.waitForTextPresent("Wrong username or password", changePasswordForm.getAuthStatusText()));
 	}
 	
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		driver.removeApp("com.owncloud.android");
 		driver.quit();
 	}

+ 20 - 5
automationTest/src/test/java/androidtest/tests/LogoutTestSuite.java

@@ -1,27 +1,42 @@
 package androidtest.tests;
 
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.LoginForm;
 import androidtest.models.MainView;
 import androidtest.models.MenuList;
 import androidtest.models.SettingsView;
 
-public class LogoutTestSuite extends Common{
+public class LogoutTestSuite{
+	
+	AndroidDriver driver;
+	Common common;
 
+	@Rule public TestName name = new TestName();
+	
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testLogout () throws Exception {
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		waitForTextPresent("ownCloud", mainView.getTitleTextElement());
+		common.assertIsInMainView();
 		MenuList menulist = mainView.clickOnMenuButton();
 		SettingsView settingsView = menulist.clickOnSettingsButton();
 		settingsView.tapOnAccountElement(1, 1000);
@@ -33,8 +48,8 @@ public class LogoutTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
-		driver.removeApp("com.owncloud.android");
+		common.takeScreenShotOnFailed(name.getMethodName());
+		//driver.removeApp("com.owncloud.android");
 		driver.quit();
 	}
 }

+ 22 - 9
automationTest/src/test/java/androidtest/tests/MoveFileTestSuite.java

@@ -1,12 +1,20 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.FixMethodOrder;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.ElementMenuOptions;
 import androidtest.models.MainView;
 import androidtest.models.MoveView;
@@ -15,23 +23,28 @@ import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class MoveFileTestSuite extends Common{
+public class MoveFileTestSuite{
+	AndroidDriver driver;
+	Common common;
 	private String FOLDER_WHERE_MOVE = "folderWhereMove";
 	private String FILE_NAME = "test";
-
+	@Rule public TestName name = new TestName();
+	
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testMoveFile () throws Exception {
 		WaitAMomentPopUp waitAMomentPopUp;
 
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 
-		waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
 
 		//check if the folder already exists and if true, delete them
 		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
@@ -39,7 +52,7 @@ public class MoveFileTestSuite extends Common{
 
 		//Create the folder where the other is gone to be moved
 		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE);
 		assertTrue(mainView.getFileElement().isDisplayed());
 
@@ -54,11 +67,11 @@ public class MoveFileTestSuite extends Common{
 		//to move to a folder
 		moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
 		waitAMomentPopUp = moveView.clickOnChoose();
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 
 		//check that the folder moved is inside the other
 		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
-		waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
 		Thread.sleep(1000);
 		mainView.scrollTillFindElement(FILE_NAME);
 		assertEquals(FILE_NAME , mainView.getFileElement().getText());
@@ -67,7 +80,7 @@ public class MoveFileTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		MainView mainView = new MainView(driver);
 		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
 		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);

+ 24 - 9
automationTest/src/test/java/androidtest/tests/MoveFolderTestSuite.java

@@ -1,11 +1,20 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
+
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.ElementMenuOptions;
 import androidtest.models.MainView;
 import androidtest.models.MoveView;
@@ -13,23 +22,29 @@ import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class MoveFolderTestSuite extends Common{
+public class MoveFolderTestSuite{
+	AndroidDriver driver;
+	Common common;
 	private String FOLDER_TO_MOVE = "folderToMove";
 	private String FOLDER_WHERE_MOVE = "folderWhereMove";
+	
+	@Rule public TestName name = new TestName();
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testMoveFolder () throws Exception {
 		WaitAMomentPopUp waitAMomentPopUp;
 
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 
-		waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
 
 		//check if the folder already exists and if true, delete them
 		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
@@ -37,13 +52,13 @@ public class MoveFolderTestSuite extends Common{
 
 		//Create the folder where the other is gone to be moved
 		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE);
 		assertTrue(mainView.getFileElement().isDisplayed());
 
 		//Create the folder which is going to be moved
 		waitAMomentPopUp = Actions.createFolder(FOLDER_TO_MOVE, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_TO_MOVE);
 		assertTrue(mainView.getFileElement().isDisplayed());
 
@@ -54,11 +69,11 @@ public class MoveFolderTestSuite extends Common{
 		//to move to a folder
 		moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
 		waitAMomentPopUp = moveView.clickOnChoose();
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		
 		//check that the folder moved is inside the other
 		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
-		waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
 		Thread.sleep(1000);
 		mainView.scrollTillFindElement(FOLDER_TO_MOVE);
 		assertEquals(FOLDER_TO_MOVE , mainView.getFileElement().getText());
@@ -66,7 +81,7 @@ public class MoveFolderTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		MainView mainView = new MainView(driver);
 		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
 		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);

+ 21 - 8
automationTest/src/test/java/androidtest/tests/RenameFileTestSuite.java

@@ -1,7 +1,13 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -9,6 +15,8 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.ElementMenuOptions;
 import androidtest.models.MainView;
 import androidtest.models.NewFolderPopUp;
@@ -16,23 +24,28 @@ import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class RenameFileTestSuite extends Common{
+public class RenameFileTestSuite{
 
+	AndroidDriver driver;
+	Common common;
 	private Boolean fileHasBeenCreated = false;
 	private final String OLD_FILE_NAME = "test";
 	private final String FILE_NAME = "newNameFile";
 	private String CurrentCreatedFile = "";
-
+	
+	@Rule public TestName name = new TestName();
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testRenameFile () throws Exception {
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		waitForTextPresent("ownCloud", mainView.getTitleTextElement());
+		common.assertIsInMainView();
 
 		//TODO. if the file already exists, do not upload
 		MainView mainViewAfterUploadFile = Actions.uploadFile(OLD_FILE_NAME, mainView);
@@ -43,13 +56,13 @@ public class RenameFileTestSuite extends Common{
 		mainViewAfterUploadFile.scrollTillFindElement(OLD_FILE_NAME);
 		assertTrue(fileHasBeenCreated = mainViewAfterUploadFile.getFileElement().isDisplayed());
 		CurrentCreatedFile = OLD_FILE_NAME;
-		waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
+		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
 		ElementMenuOptions menuOptions = mainViewAfterUploadFile.longPressOnElement(OLD_FILE_NAME);
 		NewFolderPopUp newFolderPopUp = menuOptions.clickOnRename();
 		newFolderPopUp.typeNewFolderName(FILE_NAME);
 		WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp.clickOnNewFolderOkButton();
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
 		assertNotNull(mainViewAfterUploadFile.getFileElement());
 		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());	
@@ -59,7 +72,7 @@ public class RenameFileTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		if (fileHasBeenCreated) {
 			MainView mainView = new MainView(driver);
 			Actions.deleteElement(CurrentCreatedFile,mainView, driver);

+ 21 - 6
automationTest/src/test/java/androidtest/tests/RenameFolderTestSuite.java

@@ -1,11 +1,20 @@
 package androidtest.tests;
 
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
+
 import androidtest.actions.Actions;
+import androidtest.groups.NoIgnoreTestCategory;
+import androidtest.groups.SmokeTestCategory;
 import androidtest.models.ElementMenuOptions;
 import androidtest.models.MainView;
 import androidtest.models.NewFolderPopUp;
@@ -13,28 +22,34 @@ import androidtest.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class RenameFolderTestSuite extends Common{
+public class RenameFolderTestSuite{
 
+	AndroidDriver driver;
+	Common common;
 	private Boolean folderHasBeenCreated = false;
 	private final String OLD_FOLDER_NAME = "beforeRemoving";
 	private final String FOLDER_NAME = "testCreateFolder";
 	private String CurrentCreatedFolder = "";
+	
+	@Rule public TestName name = new TestName();
 
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testRenameFolder () throws Exception {
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		waitForTextPresent("ownCloud", mainView.getTitleTextElement());
+		common.assertIsInMainView();
 
 		//TODO. if the folder already exists, do no created
 		//create the folder to rename
 		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(OLD_FOLDER_NAME, mainView);
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(OLD_FOLDER_NAME);
 
 		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());
@@ -48,7 +63,7 @@ public class RenameFolderTestSuite extends Common{
 		FolderPopUp.typeNewFolderName(FOLDER_NAME);
 		FolderPopUp.clickOnNewFolderOkButton();
 		CurrentCreatedFolder = FOLDER_NAME;
-		waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		mainView.scrollTillFindElement(FOLDER_NAME);
 		assertNotNull(mainView.getFileElement());
 		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());	
@@ -57,7 +72,7 @@ public class RenameFolderTestSuite extends Common{
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		if(folderHasBeenCreated){
 			MainView mainView = new MainView(driver);
 			Actions.deleteElement(CurrentCreatedFolder, mainView, driver);

+ 53 - 12
automationTest/src/test/java/androidtest/tests/UploadTestSuite.java

@@ -1,10 +1,15 @@
 package androidtest.tests;
 
 
+import static org.junit.Assert.*;
 import io.appium.java_client.MobileBy;
+import io.appium.java_client.android.AndroidDriver;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -12,26 +17,41 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 
 import androidtest.actions.Actions;
+import androidtest.groups.FailingTestCategory;
+import androidtest.groups.IgnoreTestCategory;
+import androidtest.groups.NoIgnoreTestCategory;
 import androidtest.models.AppDetailsView;
 import androidtest.models.ElementMenuOptions;
+import androidtest.models.GmailEmailListView;
+import androidtest.models.GmailEmailView;
+import androidtest.models.ImageView;
 import androidtest.models.MainView;
+import androidtest.models.UploadView;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class UploadTestSuite extends Common{
+@Category({NoIgnoreTestCategory.class})
+public class UploadTestSuite{
 
+	AndroidDriver driver;
+	Common common;
 	String FILE_NAME = "test";
+	
+	@Rule public TestName name = new TestName();
+	
 
 	@Before
 	public void setUp() throws Exception {
-		setUpCommonDriver();
+		common=new Common();
+		driver=common.setUpCommonDriver();
 	}
 
 	@Test
-	public void test1UploadFile () throws Exception {
+	@Category(NoIgnoreTestCategory.class)
+	public void testUploadFile () throws Exception {
 
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 
 		//check if the file already exists and if true, delete it
 		Actions.deleteElement(FILE_NAME, mainView, driver);
@@ -40,19 +60,40 @@ public class UploadTestSuite extends Common{
 
 		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
 		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());
-		waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
+		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
 
 
 	}
-
+	
 	@Test
-	public void test2KeepFileUpToDate () throws Exception {
+	@Category(IgnoreTestCategory.class)
+	public void testUploadFromGmail () throws Exception {
+		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		driver.startActivity("com.google.android.gm", ".ConversationListActivityGmail");
+		GmailEmailListView gmailEmailListView = new GmailEmailListView(driver);
+		GmailEmailView gmailEmailView = gmailEmailListView.clickOnEmail();
+		ImageView imageView = gmailEmailView.clickOnfileButton();
+		imageView.clickOnOptionsButton();
+		imageView.clickOnShareButton();
+		imageView.clickOnOwnCloudButton();
+		imageView.clickOnJustOnceButton();
+		UploadView uploadView = new UploadView(driver);
+		uploadView.clickOUploadButton();
+		driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
+		common.wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.name("test.jpg")));
+		assertEquals("test.jpg" , driver.findElementByName("test.jpg").getText());
+	}
+
+	
+	@Test	
+	@Category({IgnoreTestCategory.class, FailingTestCategory.class})
+	public void testKeepFileUpToDate () throws Exception {
 
 		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));
+		common.assertIsInMainView();
 
-		waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
 
 		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
 		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
@@ -63,14 +104,14 @@ public class UploadTestSuite extends Common{
 		appDetailsView.checkKeepFileUpToDateCheckbox();
 		Thread.sleep(3000);
 		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
-		assertTrue(isElementPresent(mainViewAfterUploadFile.getFileElementLayout(), MobileBy.id(MainView.getFavoriteFileIndicator())));
+		assertTrue(common.isElementPresent(mainViewAfterUploadFile.getFileElementLayout(), MobileBy.id(MainView.getFavoriteFileIndicator())));
 
 	}
 
 
 	@After
 	public void tearDown() throws Exception {
-		takeScreenShotOnFailed(getName());
+		common.takeScreenShotOnFailed(name.getMethodName());
 		MainView mainView = new MainView(driver);
 		Actions.deleteElement(FILE_NAME,mainView, driver);
 		driver.removeApp("com.owncloud.android");