mirror of
https://github.com/nextcloud/android.git
synced 2024-11-26 23:28:42 +03:00
commit
33fae4d071
63 changed files with 4329 additions and 1 deletions
32
automationTest/.classpath
Normal file
32
automationTest/.classpath
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="resources"/>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
4
automationTest/.gitignore
vendored
Normal file
4
automationTest/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
|
||||
target/
|
||||
ScreenShots/
|
||||
.DS_Store
|
23
automationTest/.project
Normal file
23
automationTest/.project
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>androidtest</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
12
automationTest/.settings/org.eclipse.jdt.core.prefs
Normal file
12
automationTest/.settings/org.eclipse.jdt.core.prefs
Normal file
|
@ -0,0 +1,12 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
4
automationTest/.settings/org.eclipse.m2e.core.prefs
Normal file
4
automationTest/.settings/org.eclipse.m2e.core.prefs
Normal file
|
@ -0,0 +1,4 @@
|
|||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
15
automationTest/README.md
Normal file
15
automationTest/README.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
** Work in progress
|
||||
|
||||
This project contains a set of automatic tests operating in the UI level.
|
||||
|
||||
Tests are to be run with the tool Appium. Check [here][0] to install it and all its dependencies (including Maven).
|
||||
|
||||
You will need to modify the constants in automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/Config.java to assign appropiate values for your test server and accounts.
|
||||
|
||||
To run the tests from command line, plug a device to your computer or start and emulator. Then type
|
||||
|
||||
mvn clean tests
|
||||
|
||||
The project may also be imported in Eclipse, with the appropiate plug-ins, and run from it.
|
||||
|
||||
[0]: http://appium.io/slate/en/master/?java#about-appium
|
78
automationTest/pom.xml
Normal file
78
automationTest/pom.xml
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.owncloud</groupId>
|
||||
<artifactId>androidtest</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.18.1</version>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*Test**.java</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.3</version>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
<artifactId>selenium-java</artifactId>
|
||||
<version>2.45.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.selendroid</groupId>
|
||||
<version>0.9.0</version>
|
||||
<artifactId>selendroid-standalone</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.selendroid</groupId>
|
||||
<version>0.9.0</version>
|
||||
<artifactId>selendroid-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.appium</groupId>
|
||||
<artifactId>java-client</artifactId>
|
||||
<version>2.2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.android</groupId>
|
||||
<artifactId>android</artifactId>
|
||||
<version>4.1.1.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
4
automationTest/resources/.gitignore
vendored
Normal file
4
automationTest/resources/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
|
@ -0,0 +1,244 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.actions;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.ScreenOrientation;
|
||||
import org.openqa.selenium.remote.RemoteWebElement;
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import com.owncloud.android.test.ui.models.CertificatePopUp;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.GmailSendMailView;
|
||||
import com.owncloud.android.test.ui.models.ShareView;
|
||||
import com.owncloud.android.test.ui.models.UploadFilesView;
|
||||
import com.owncloud.android.test.ui.models.LoginForm;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MenuList;
|
||||
import com.owncloud.android.test.ui.models.NewFolderPopUp;
|
||||
import com.owncloud.android.test.ui.models.RemoveConfirmationView;
|
||||
import com.owncloud.android.test.ui.models.SettingsView;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
import com.owncloud.android.test.ui.testSuites.Common;
|
||||
import com.owncloud.android.test.ui.testSuites.Config;
|
||||
|
||||
public class Actions {
|
||||
|
||||
public static FileListView login(String url, String user, String password,
|
||||
Boolean isTrusted, AndroidDriver driver)
|
||||
throws InterruptedException {
|
||||
LoginForm loginForm = new LoginForm(driver);
|
||||
CertificatePopUp certificatePopUp = loginForm.typeHostUrl(url);
|
||||
if(!isTrusted){
|
||||
WebDriverWait wait = new WebDriverWait(driver, 30);
|
||||
//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);
|
||||
//TODO. Assert related to check the connection?
|
||||
return loginForm.clickOnConnectButton();
|
||||
}
|
||||
|
||||
public static WaitAMomentPopUp createFolder(String folderName,
|
||||
FileListView fileListView){
|
||||
NewFolderPopUp newFolderPopUp = fileListView.clickOnNewFolderButton();
|
||||
newFolderPopUp.typeNewFolderName(folderName);
|
||||
WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp
|
||||
.clickOnNewFolderOkButton();
|
||||
//TODO. assert here
|
||||
return waitAMomentPopUp;
|
||||
}
|
||||
|
||||
|
||||
public static AndroidElement scrollTillFindElement (String elementName,
|
||||
AndroidElement element, AndroidDriver driver) {
|
||||
AndroidElement fileElement;
|
||||
|
||||
if(element.getAttribute("scrollable").equals("true")){
|
||||
HashMap<String, String> scrollObject = new HashMap<String,String>();
|
||||
scrollObject.put("text", elementName);
|
||||
scrollObject.put("element", ( (RemoteWebElement) element).getId());
|
||||
driver.executeScript("mobile: scrollTo", scrollObject);
|
||||
}
|
||||
try {
|
||||
fileElement = (AndroidElement) driver
|
||||
.findElementByName(elementName);
|
||||
} catch (NoSuchElementException e) {
|
||||
fileElement = null;
|
||||
}
|
||||
return fileElement;
|
||||
}
|
||||
|
||||
|
||||
public static void deleteAccount (int accountPosition,FileListView fileListView) {
|
||||
MenuList menulist = fileListView.clickOnMenuButton();
|
||||
SettingsView settingView = menulist.clickOnSettingsButton();
|
||||
deleteAccount(accountPosition,settingView);
|
||||
}
|
||||
|
||||
public static void deleteAccount (int accountPosition, SettingsView settingsView) {
|
||||
settingsView.tapOnAccountElement(accountPosition,1, 1000);
|
||||
settingsView.clickOnDeleteAccountElement();
|
||||
}
|
||||
|
||||
public static void clickOnMainLayout(AndroidDriver driver){
|
||||
driver.tap(1, 0, 0, 1);
|
||||
}
|
||||
|
||||
|
||||
public static AndroidElement deleteElement(String elementName,
|
||||
FileListView fileListView, AndroidDriver driver) throws Exception{
|
||||
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 = fileListView
|
||||
.longPressOnElement(elementName);
|
||||
RemoveConfirmationView removeConfirmationView = menuOptions
|
||||
.clickOnRemove();;
|
||||
waitAMomentPopUp = removeConfirmationView
|
||||
.clickOnRemoteAndLocalButton();
|
||||
Common.waitTillElementIsNotPresent(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
}catch(NoSuchElementException e){
|
||||
fileElement=null;
|
||||
}
|
||||
return fileElement;
|
||||
}
|
||||
|
||||
public static AndroidElement shareLinkElementByGmail(String elementName,
|
||||
FileListView fileListView, AndroidDriver driver, Common common)
|
||||
throws Exception{
|
||||
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");
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(elementName);
|
||||
ShareView shareView = menuOptions.clickOnShareLinkElement();
|
||||
Actions.scrollTillFindElement("Gmail", shareView
|
||||
.getListViewLayout(), driver).click();
|
||||
GmailSendMailView gmailSendMailView = new GmailSendMailView(driver);
|
||||
gmailSendMailView.typeToEmailAdress(Config.gmailAccount);
|
||||
gmailSendMailView.clickOnSendButton();
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView
|
||||
.getProgressCircular(), 1000);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListView.getFileElementLayout()
|
||||
.findElement(By.id(FileListView
|
||||
.getSharedElementIndicator()))));
|
||||
|
||||
}catch(NoSuchElementException e){
|
||||
return null;
|
||||
}
|
||||
return (AndroidElement) fileListView.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getSharedElementIndicator()));
|
||||
}
|
||||
|
||||
public static AndroidElement shareLinkElementByCopyLink(String elementName,
|
||||
FileListView fileListView, AndroidDriver driver, Common common)
|
||||
throws Exception{
|
||||
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");
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(elementName);
|
||||
ShareView shareView = menuOptions.clickOnShareLinkElement();
|
||||
Actions.scrollTillFindElement("Copy link", shareView.getListViewLayout(),
|
||||
driver).click();
|
||||
WaitAMomentPopUp waitAMomentPopUp = new WaitAMomentPopUp(driver);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListView.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getSharedElementIndicator()))));
|
||||
}catch(NoSuchElementException e){
|
||||
return null;
|
||||
}
|
||||
return (AndroidElement) fileListView.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getSharedElementIndicator()));
|
||||
}
|
||||
|
||||
|
||||
public static void unshareLinkElement(String elementName,
|
||||
FileListView fileListView, AndroidDriver driver, Common common)
|
||||
throws Exception{
|
||||
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");
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(elementName);
|
||||
WaitAMomentPopUp waitAMomentPopUp = menuOptions
|
||||
.clickOnUnshareLinkElement();
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
Common.waitTillElementIsNotPresent((AndroidElement) fileListView
|
||||
.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getSharedElementIndicator())
|
||||
),100);
|
||||
}catch(NoSuchElementException e){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static FileListView uploadFile(String elementName,
|
||||
FileListView fileListView) throws InterruptedException{
|
||||
fileListView.clickOnUploadButton();
|
||||
UploadFilesView uploadFilesView = fileListView
|
||||
.clickOnFilesElementUploadFile();
|
||||
uploadFilesView.clickOnFileName(elementName);
|
||||
FileListView fileListViewAfterUploadFile = uploadFilesView
|
||||
.clickOnUploadButton();
|
||||
//TO DO. detect when the file is successfully uploaded
|
||||
Thread.sleep(15000);
|
||||
return fileListViewAfterUploadFile;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface FailingTestCategory extends IgnoreTestCategory {}
|
|
@ -0,0 +1,138 @@
|
|||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Categories.CategoryFilter;
|
||||
import org.junit.experimental.categories.Categories.ExcludeCategory;
|
||||
import org.junit.experimental.categories.Categories.IncludeCategory;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runner.manipulation.NoTestsRemainException;
|
||||
import org.junit.runners.Suite;
|
||||
import org.junit.runners.model.InitializationError;
|
||||
import org.junit.runners.model.RunnerBuilder;
|
||||
|
||||
/**
|
||||
* This class is based on org.junit.experimental.categories.Categories from JUnit 4.10.
|
||||
*
|
||||
* All anotations and inner classes from the original class Categories are removed,
|
||||
* since they will be re-used.
|
||||
* Unfortunately sub-classing Categories did not work.
|
||||
*/
|
||||
public class FlexibleCategories extends Suite {
|
||||
|
||||
/**
|
||||
* Specifies the package which should be scanned for test classes (e.g. @TestScanPackage("my.package")).
|
||||
* This annotation is required.
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface TestScanPackage {
|
||||
public String value();
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the prefix of matching class names (e.g. @TestClassPrefix("Test")).
|
||||
* This annotation is optional (default: "").
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface TestClassPrefix {
|
||||
public String value();
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the suffix of matching class names (e.g. @TestClassSuffix("Test")).
|
||||
* This annotation is optional (default: "Test").
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface TestClassSuffix {
|
||||
public String value();
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies an annotation for methods which must be present in a matching class (e.g. @TestMethodAnnotationFilter(Test.class)).
|
||||
* This annotation is optional (default: org.junit.Test.class).
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface TestMethodAnnotation {
|
||||
public Class<? extends Annotation> value();
|
||||
}
|
||||
|
||||
public FlexibleCategories(Class<?> clazz, RunnerBuilder builder)
|
||||
throws InitializationError {
|
||||
this(builder, clazz, PatternClasspathClassesFinder.getSuiteClasses(
|
||||
getTestScanPackage(clazz), getTestClassPrefix(clazz), getTestClassSuffix(clazz),
|
||||
getTestMethodAnnotation(clazz)));
|
||||
try {
|
||||
filter(new CategoryFilter(getIncludedCategory(clazz),
|
||||
getExcludedCategory(clazz)));
|
||||
} catch (NoTestsRemainException e) {
|
||||
// Ignore all classes with no matching tests.
|
||||
}
|
||||
assertNoCategorizedDescendentsOfUncategorizeableParents(getDescription());
|
||||
}
|
||||
|
||||
public FlexibleCategories(RunnerBuilder builder, Class<?> clazz,
|
||||
Class<?>[] suiteClasses) throws InitializationError {
|
||||
super(builder, clazz, suiteClasses);
|
||||
}
|
||||
|
||||
private static String getTestScanPackage(Class<?> clazz) throws InitializationError {
|
||||
TestScanPackage annotation = clazz.getAnnotation(TestScanPackage.class);
|
||||
if (annotation == null) {
|
||||
throw new InitializationError("No package given to scan for tests!\nUse the annotation @TestScanPackage(\"my.package\") on the test suite " + clazz + ".");
|
||||
}
|
||||
return annotation.value();
|
||||
}
|
||||
|
||||
private static String getTestClassPrefix(Class<?> clazz) {
|
||||
TestClassPrefix annotation = clazz.getAnnotation(TestClassPrefix.class);
|
||||
return annotation == null ? "" : annotation.value();
|
||||
}
|
||||
|
||||
private static String getTestClassSuffix(Class<?> clazz) {
|
||||
TestClassSuffix annotation = clazz.getAnnotation(TestClassSuffix.class);
|
||||
return annotation == null ? "Test" : annotation.value();
|
||||
}
|
||||
|
||||
private static Class<? extends Annotation> getTestMethodAnnotation(Class<?> clazz) {
|
||||
TestMethodAnnotation annotation = clazz.getAnnotation(TestMethodAnnotation.class);
|
||||
return annotation == null ? Test.class : annotation.value();
|
||||
}
|
||||
|
||||
private Class<?> getIncludedCategory(Class<?> clazz) {
|
||||
IncludeCategory annotation= clazz.getAnnotation(IncludeCategory.class);
|
||||
return annotation == null ? null : annotation.value();
|
||||
}
|
||||
|
||||
private Class<?> getExcludedCategory(Class<?> clazz) {
|
||||
ExcludeCategory annotation= clazz.getAnnotation(ExcludeCategory.class);
|
||||
return annotation == null ? null : annotation.value();
|
||||
}
|
||||
|
||||
private void assertNoCategorizedDescendentsOfUncategorizeableParents(Description description) throws InitializationError {
|
||||
if (!canHaveCategorizedChildren(description))
|
||||
assertNoDescendantsHaveCategoryAnnotations(description);
|
||||
for (Description each : description.getChildren())
|
||||
assertNoCategorizedDescendentsOfUncategorizeableParents(each);
|
||||
}
|
||||
|
||||
private void assertNoDescendantsHaveCategoryAnnotations(Description description) throws InitializationError {
|
||||
for (Description each : description.getChildren()) {
|
||||
if (each.getAnnotation(Category.class) != null)
|
||||
throw new InitializationError("Category annotations on Parameterized classes are not supported on individual methods.");
|
||||
assertNoDescendantsHaveCategoryAnnotations(each);
|
||||
}
|
||||
}
|
||||
|
||||
// If children have names like [0], our current magical category code can't determine their
|
||||
// parentage.
|
||||
private static boolean canHaveCategorizedChildren(Description description) {
|
||||
for (Description each : description.getChildren())
|
||||
if (each.getTestClass() == null)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface IgnoreTestCategory {}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface InProgressCategory extends IgnoreTestCategory{
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface NoIgnoreTestCategory {
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface OtherTestCategory extends IgnoreTestCategory {}
|
|
@ -0,0 +1,141 @@
|
|||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* Modified version of ClasspathClassesFinder from:
|
||||
* http://linsolas.free.fr/wordpress/index.php/2011/02/how-to-categorize-junit-tests-with-maven/
|
||||
*
|
||||
* The difference is, that it does not search for annotated classes but for classes with a certain
|
||||
* class name prefix and suffix.
|
||||
*/
|
||||
public final class PatternClasspathClassesFinder {
|
||||
|
||||
/**
|
||||
* Get the list of classes of a given package name, and that are annotated
|
||||
* by a given annotation.
|
||||
*
|
||||
* @param packageName
|
||||
* The package name of the classes.
|
||||
* @param classPrefix
|
||||
* The prefix of the class name.
|
||||
* @param classSuffix
|
||||
* The suffix of the class name.
|
||||
* @param methodAnnotation
|
||||
* Only return classes containing methods annotated with methodAnnotation.
|
||||
* @return The List of classes that matches the requirements.
|
||||
*/
|
||||
public static Class<?>[] getSuiteClasses(String packageName,
|
||||
String classPrefix, String classSuffix,
|
||||
Class<? extends Annotation> methodAnnotation) {
|
||||
try {
|
||||
return getClasses(packageName, classPrefix, classSuffix, methodAnnotation);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of classes of a given package name, and that are annotated
|
||||
* by a given annotation.
|
||||
*
|
||||
* @param packageName
|
||||
* The package name of the classes.
|
||||
* @param classPrefix
|
||||
* The prefix of the class name.
|
||||
* @param classSuffix
|
||||
* The suffix of the class name.
|
||||
* @param methodAnnotation
|
||||
* Only return classes containing methods annotated with methodAnnotation.
|
||||
* @return The List of classes that matches the requirements.
|
||||
* @throws ClassNotFoundException
|
||||
* If something goes wrong...
|
||||
* @throws IOException
|
||||
* If something goes wrong...
|
||||
*/
|
||||
private static Class<?>[] getClasses(String packageName,
|
||||
String classPrefix, String classSuffix,
|
||||
Class<? extends Annotation> methodAnnotation)
|
||||
throws ClassNotFoundException, IOException {
|
||||
ClassLoader classLoader = Thread.currentThread()
|
||||
.getContextClassLoader();
|
||||
String path = packageName.replace('.', '/');
|
||||
// Get classpath
|
||||
Enumeration<URL> resources = classLoader.getResources(path);
|
||||
List<File> dirs = new ArrayList<File>();
|
||||
while (resources.hasMoreElements()) {
|
||||
URL resource = resources.nextElement();
|
||||
dirs.add(new File(resource.getFile()));
|
||||
}
|
||||
// For each classpath, get the classes.
|
||||
ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
|
||||
for (File directory : dirs) {
|
||||
classes.addAll(findClasses(directory, packageName, classPrefix, classSuffix, methodAnnotation));
|
||||
}
|
||||
return classes.toArray(new Class[classes.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find classes, in a given directory (recursively), for a given package
|
||||
* name, that are annotated by a given annotation.
|
||||
*
|
||||
* @param directory
|
||||
* The directory where to look for.
|
||||
* @param packageName
|
||||
* The package name of the classes.
|
||||
* @param classPrefix
|
||||
* The prefix of the class name.
|
||||
* @param classSuffix
|
||||
* The suffix of the class name.
|
||||
* @param methodAnnotation
|
||||
* Only return classes containing methods annotated with methodAnnotation.
|
||||
* @return The List of classes that matches the requirements.
|
||||
* @throws ClassNotFoundException
|
||||
* If something goes wrong...
|
||||
*/
|
||||
private static List<Class<?>> findClasses(File directory,
|
||||
String packageName, String classPrefix, String classSuffix,
|
||||
Class<? extends Annotation> methodAnnotation)
|
||||
throws ClassNotFoundException {
|
||||
List<Class<?>> classes = new ArrayList<Class<?>>();
|
||||
if (!directory.exists()) {
|
||||
return classes;
|
||||
}
|
||||
File[] files = directory.listFiles();
|
||||
for (File file : files) {
|
||||
if (file.isDirectory()) {
|
||||
classes.addAll(findClasses(file,
|
||||
packageName + "." + file.getName(), classPrefix, classSuffix, methodAnnotation));
|
||||
} else if (file.getName().startsWith(classPrefix) && file.getName().endsWith(classSuffix + ".class")) {
|
||||
// We remove the .class at the end of the filename to get the
|
||||
// class name...
|
||||
Class<?> clazz = Class.forName(packageName
|
||||
+ '.'
|
||||
+ file.getName().substring(0,
|
||||
file.getName().length() - 6));
|
||||
|
||||
// Check, if class contains test methods (prevent "No runnable methods" exception):
|
||||
boolean classHasTest = false;
|
||||
for (Method method : clazz.getMethods()) {
|
||||
if (method.getAnnotation(methodAnnotation) != null) {
|
||||
classHasTest = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (classHasTest) {
|
||||
classes.add(clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
return classes;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface SmokeTestCategory {
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.groups;
|
||||
|
||||
public interface UnfinishedTestCategory extends IgnoreTestCategory{
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class CertificatePopUp {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "OK")
|
||||
private AndroidElement okButton;
|
||||
|
||||
public CertificatePopUp (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void clickOnOkButton () {
|
||||
okButton.click();
|
||||
}
|
||||
|
||||
public AndroidElement getOkButtonElement () {
|
||||
return okButton;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class ElementMenuOptions {
|
||||
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "Share link")
|
||||
private AndroidElement shareLinkElement;
|
||||
|
||||
@AndroidFindBy(name = "Unshare link")
|
||||
private AndroidElement unshareLinkElement;
|
||||
|
||||
@AndroidFindBy(name = "Details")
|
||||
private AndroidElement detailsFileElement;
|
||||
|
||||
@AndroidFindBy(name = "Rename")
|
||||
private AndroidElement renameFileElement;
|
||||
|
||||
@AndroidFindBy(name = "Remove")
|
||||
private AndroidElement removeFileElement;
|
||||
|
||||
@AndroidFindBy(name = "Move")
|
||||
private AndroidElement moveElement;
|
||||
|
||||
public ElementMenuOptions (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public FileDetailsView clickOnDetails () {
|
||||
detailsFileElement.click();
|
||||
FileDetailsView fileDetailsView = new FileDetailsView(driver);
|
||||
return fileDetailsView;
|
||||
}
|
||||
|
||||
public RemoveConfirmationView clickOnRemove () {
|
||||
removeFileElement.click();
|
||||
RemoveConfirmationView removeConfirmationView =
|
||||
new RemoveConfirmationView(driver);
|
||||
return removeConfirmationView;
|
||||
}
|
||||
|
||||
|
||||
public MoveView clickOnMove () {
|
||||
moveElement.click();
|
||||
MoveView moveView = new MoveView(driver);
|
||||
return moveView;
|
||||
}
|
||||
|
||||
public NewFolderPopUp clickOnRename () {
|
||||
renameFileElement.click();
|
||||
NewFolderPopUp newFolderPopUp = new NewFolderPopUp(driver);
|
||||
return newFolderPopUp;
|
||||
}
|
||||
|
||||
public ShareView clickOnShareLinkElement () {
|
||||
shareLinkElement.click();
|
||||
ShareView shareView = new ShareView(driver);
|
||||
return shareView;
|
||||
}
|
||||
|
||||
public WaitAMomentPopUp clickOnUnshareLinkElement () {
|
||||
unshareLinkElement.click();
|
||||
WaitAMomentPopUp waitAMomentPopUp = new WaitAMomentPopUp(driver);
|
||||
return waitAMomentPopUp;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class FileDetailsView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(name = "Keep file up to date")
|
||||
private AndroidElement keepFileUpToDateCheckbox;
|
||||
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/fdProgressBar")
|
||||
private AndroidElement progressBar;
|
||||
|
||||
public FileDetailsView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void checkKeepFileUpToDateCheckbox () {
|
||||
if(keepFileUpToDateCheckbox.getAttribute("checked").equals("false")){
|
||||
keepFileUpToDateCheckbox.click();
|
||||
}
|
||||
}
|
||||
|
||||
public void unCheckKeepFileUpToDateCheckbox () {
|
||||
if(keepFileUpToDateCheckbox.getAttribute("checked").equals("true")){
|
||||
keepFileUpToDateCheckbox.click();
|
||||
}
|
||||
}
|
||||
|
||||
public AndroidElement getProgressBar (){
|
||||
return progressBar;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,211 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
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;
|
||||
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.Point;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
|
||||
public class FileListView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"More options\")")
|
||||
private AndroidElement menuButton;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/list_root")
|
||||
private AndroidElement filesLayout;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".resourceId(\"android:id/action_bar_title\")")
|
||||
private AndroidElement titleText;
|
||||
|
||||
@AndroidFindBy(id = "android:id/progress_circular")
|
||||
private AndroidElement progressCircular;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"New folder\")")
|
||||
private AndroidElement newFolderButton;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Upload\")")
|
||||
private AndroidElement uploadButton;
|
||||
|
||||
private AndroidElement waitAMomentText;
|
||||
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/ListItemLayout")
|
||||
private List<AndroidElement> listItemLayout;
|
||||
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/list_root")
|
||||
private AndroidElement listRootLayout;
|
||||
|
||||
@AndroidFindBy(name = "Files")
|
||||
private AndroidElement filesElementUploadFile;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"List Layout\")")
|
||||
private AndroidElement listLayout;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.FrameLayout\").index(0)")
|
||||
private AndroidElement deviceScreen;
|
||||
|
||||
private AndroidElement fileElement;
|
||||
|
||||
private AndroidElement fileElementLayout;
|
||||
|
||||
private static String localFileIndicator =
|
||||
"com.owncloud.android:id/localFileIndicator";
|
||||
private static String favoriteFileIndicator =
|
||||
"com.owncloud.android:id/favoriteIcon";
|
||||
private static String sharedElementIndicator =
|
||||
"com.owncloud.android:id/sharedIcon";
|
||||
|
||||
|
||||
public FileListView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public MenuList clickOnMenuButton () {
|
||||
//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;
|
||||
}
|
||||
|
||||
public SettingsView getSettingsView () {
|
||||
SettingsView settingsView = new SettingsView(driver);
|
||||
return settingsView;
|
||||
}
|
||||
|
||||
public NewFolderPopUp clickOnNewFolderButton () {
|
||||
newFolderButton.click();
|
||||
NewFolderPopUp newFolderPopUp = new NewFolderPopUp(driver);
|
||||
return newFolderPopUp;
|
||||
}
|
||||
|
||||
public void clickOnUploadButton () {
|
||||
uploadButton.click();
|
||||
}
|
||||
|
||||
public UploadFilesView clickOnFilesElementUploadFile () {
|
||||
filesElementUploadFile.click();
|
||||
UploadFilesView uploadFilesView = new UploadFilesView(driver);
|
||||
return uploadFilesView;
|
||||
}
|
||||
|
||||
public AndroidElement getTitleTextElement () {
|
||||
return titleText;
|
||||
}
|
||||
|
||||
public AndroidElement getUploadButton () {
|
||||
return uploadButton;
|
||||
}
|
||||
|
||||
public AndroidElement getWaitAMomentTextElement () {
|
||||
return waitAMomentText;
|
||||
}
|
||||
|
||||
public AndroidElement getListRootElement () {
|
||||
return listRootLayout;
|
||||
}
|
||||
|
||||
public List<AndroidElement> getListItemLayout () {
|
||||
return listItemLayout;
|
||||
}
|
||||
|
||||
public AndroidElement getFileElement () {
|
||||
return fileElement;
|
||||
}
|
||||
|
||||
public ElementMenuOptions longPressOnElement (String elementName) {
|
||||
scrollTillFindElement(elementName).tap(1, 1000);
|
||||
//fileElement.tap(1, 1000);
|
||||
ElementMenuOptions menuOptions = new ElementMenuOptions(driver);
|
||||
return menuOptions;
|
||||
}
|
||||
|
||||
public AndroidElement scrollTillFindElement (String elementName) {
|
||||
fileElement = Actions
|
||||
.scrollTillFindElement (elementName,filesLayout,driver);
|
||||
try {
|
||||
fileElementLayout = (AndroidElement) driver
|
||||
.findElementByAndroidUIAutomator("new UiSelector()"
|
||||
+ ".description(\"LinearLayout-"+ elementName +"\")");
|
||||
} catch (NoSuchElementException e) {
|
||||
fileElementLayout = null;
|
||||
}
|
||||
return fileElement;
|
||||
}
|
||||
|
||||
public AndroidElement getFileElementLayout () {
|
||||
return fileElementLayout;
|
||||
}
|
||||
|
||||
public AndroidElement getProgressCircular () {
|
||||
return progressCircular;
|
||||
}
|
||||
|
||||
public static String getLocalFileIndicator() {
|
||||
return localFileIndicator;
|
||||
}
|
||||
|
||||
public static String getFavoriteFileIndicator() {
|
||||
return favoriteFileIndicator;
|
||||
}
|
||||
|
||||
public static String getSharedElementIndicator() {
|
||||
return sharedElementIndicator;
|
||||
}
|
||||
public void pulldownToRefresh () throws InterruptedException {
|
||||
Point listLocation = listLayout.getLocation();
|
||||
driver.swipe(listLocation.getX(),listLocation.getY(),
|
||||
listLocation.getX(),listLocation.getY()+1000, 5000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void pulldownToSeeNotification () throws InterruptedException {
|
||||
Point listLocation = deviceScreen.getLocation();
|
||||
driver.swipe(listLocation.getX(),listLocation.getY(),
|
||||
listLocation.getX(),listLocation.getY()+1000, 5000);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class GmailEmailListView {
|
||||
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\""
|
||||
+ "me about UploadFile, on May 11, conversation read\")")
|
||||
private AndroidElement emailAmericanFormatDate;
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\""
|
||||
+ "me about UploadFile, on 11 May, conversation read\")")
|
||||
private AndroidElement emailEuropeanFormatDate;
|
||||
|
||||
|
||||
public GmailEmailListView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public GmailEmailView clickOnEmail (){
|
||||
try{
|
||||
emailAmericanFormatDate.click();
|
||||
}catch (NoSuchElementException e) {
|
||||
emailEuropeanFormatDate.click();
|
||||
}
|
||||
GmailEmailView gmailEmailView = new GmailEmailView(driver);
|
||||
return gmailEmailView;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import com.owncloud.android.test.ui.testSuites.Config;
|
||||
|
||||
public class GmailEmailView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(name = Config.fileToTestSendByEmailName)
|
||||
private AndroidElement fileButton;
|
||||
|
||||
public GmailEmailView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public ImageView clickOnfileButton (){
|
||||
fileButton.click();
|
||||
ImageView imageView = new ImageView(driver);
|
||||
return imageView;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class GmailSendMailView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"To\")")
|
||||
private AndroidElement toTextField;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(name = "Subject")
|
||||
private AndroidElement subjectTextField;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Send\")")
|
||||
private AndroidElement sendButton;
|
||||
|
||||
public GmailSendMailView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void typeToEmailAdress (String email) {
|
||||
toTextField.sendKeys(email + "\n");
|
||||
}
|
||||
|
||||
public void clickOnSendButton () {
|
||||
sendButton.click();
|
||||
}
|
||||
|
||||
public void typeSubject (String subject) {
|
||||
subjectTextField.clear();
|
||||
subjectTextField.sendKeys(subject);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.testSuites.Common;
|
||||
|
||||
|
||||
public class ImageView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"More options\")")
|
||||
private AndroidElement optionsButton;
|
||||
|
||||
@AndroidFindBy(name = "Share")
|
||||
private AndroidElement shareButton;
|
||||
|
||||
@AndroidFindBy(name = "ownCloud")
|
||||
private AndroidElement ownCloudButton;
|
||||
|
||||
@AndroidFindBy(name = "Share with ownCloud")
|
||||
private AndroidElement shareWithOwnCloudButton;
|
||||
|
||||
@AndroidFindBy(name = "Just once")
|
||||
private AndroidElement justOnceButton;
|
||||
|
||||
@AndroidFindBy(id = "android:id/resolver_list")
|
||||
private AndroidElement sharingAppsLayout;
|
||||
|
||||
public ImageView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void clickOnOptionsButton(){
|
||||
optionsButton.click();
|
||||
}
|
||||
|
||||
public void clickOnShareButton(){
|
||||
shareButton.click();
|
||||
}
|
||||
|
||||
public void clickOnOwnCloudButton(){
|
||||
if(Common.isElementPresent(ownCloudButton)){
|
||||
Actions.scrollTillFindElement("ownCloud",sharingAppsLayout,driver);
|
||||
ownCloudButton.click();
|
||||
}else if(Common.isElementPresent(shareWithOwnCloudButton)){}
|
||||
}
|
||||
|
||||
public void clickOnJustOnceButton(){
|
||||
justOnceButton.click();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
public class LoginForm {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"Server address\")")
|
||||
private AndroidElement hostUrlInput;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Username\")")
|
||||
private AndroidElement userNameInput;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Password\")")
|
||||
private AndroidElement passwordInput;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Connect\")")
|
||||
private AndroidElement connectButton;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"Testing connection\")")
|
||||
private AndroidElement serverStatusText;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".description(\"Wrong username or password\")")
|
||||
private AndroidElement authStatusText;
|
||||
|
||||
public LoginForm (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public CertificatePopUp typeHostUrl (String hostUrl) {
|
||||
hostUrlInput.clear();
|
||||
hostUrlInput.sendKeys(hostUrl + "\n");
|
||||
CertificatePopUp certificatePopUp = new CertificatePopUp(driver);
|
||||
return certificatePopUp;
|
||||
}
|
||||
|
||||
public void clickOnUserName () {
|
||||
userNameInput.click();
|
||||
}
|
||||
|
||||
public void typeUserName (String userName) {
|
||||
userNameInput.clear();
|
||||
//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 + "\n");
|
||||
//driver.hideKeyboard();
|
||||
}
|
||||
|
||||
public FileListView clickOnConnectButton () {
|
||||
connectButton.click();
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
return fileListView;
|
||||
}
|
||||
|
||||
public AndroidElement gethostUrlInput () {
|
||||
return hostUrlInput;
|
||||
}
|
||||
|
||||
public AndroidElement getUserNameInput () {
|
||||
return userNameInput;
|
||||
}
|
||||
|
||||
public AndroidElement getPasswordInput () {
|
||||
return passwordInput;
|
||||
}
|
||||
|
||||
|
||||
public AndroidElement getServerStatusTextElement () {
|
||||
return serverStatusText;
|
||||
}
|
||||
|
||||
public AndroidElement getAuthStatusText () {
|
||||
return authStatusText;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
public class MenuList {
|
||||
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "Settings")
|
||||
private AndroidElement settingsButton;
|
||||
|
||||
public MenuList (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public SettingsView clickOnSettingsButton () {
|
||||
settingsButton.click();
|
||||
SettingsView settingsView = new SettingsView(driver);
|
||||
return settingsView;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
|
||||
public class MoveView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/list_root")
|
||||
private AndroidElement filesLayout;
|
||||
|
||||
@AndroidFindBy(name = "Choose")
|
||||
private AndroidElement chooseButton;
|
||||
|
||||
public MoveView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public WaitAMomentPopUp clickOnChoose () {
|
||||
chooseButton.click();
|
||||
WaitAMomentPopUp waitAMomentPopUp = new WaitAMomentPopUp(driver);
|
||||
return waitAMomentPopUp;
|
||||
}
|
||||
|
||||
public AndroidElement scrollTillFindElement (String elementName) {
|
||||
return Actions.scrollTillFindElement (elementName,filesLayout,driver);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
public class NewFolderPopUp {
|
||||
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".resourceId(\"android:id/button1\")")
|
||||
private AndroidElement newFolderOkButton;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".resourceId(\"com.owncloud.android:id/user_input\")")
|
||||
private AndroidElement newFolderNameField;
|
||||
|
||||
public NewFolderPopUp (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void typeNewFolderName (String newFolderName) {
|
||||
newFolderNameField.clear();
|
||||
newFolderNameField.sendKeys(newFolderName + "\n");
|
||||
//driver.hideKeyboard();
|
||||
}
|
||||
|
||||
public WaitAMomentPopUp clickOnNewFolderOkButton () {
|
||||
newFolderOkButton.click();
|
||||
WaitAMomentPopUp waitAMomentPopUp = new WaitAMomentPopUp(driver);
|
||||
return waitAMomentPopUp;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class NotificationView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "Upload succeeded")
|
||||
private static AndroidElement uploadSucceededNotification;
|
||||
|
||||
@AndroidFindBy(name = "Uploading ?")
|
||||
private static AndroidElement uploadingNotification;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Clear all notifications.\")")
|
||||
private AndroidElement clearAllNotificationButton;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.FrameLayout\").index(0)")
|
||||
private AndroidElement notificationArea;
|
||||
|
||||
|
||||
public NotificationView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
|
||||
public AndroidElement getUploadSucceededNotification() {
|
||||
return uploadSucceededNotification;
|
||||
}
|
||||
|
||||
public AndroidElement getUploadingNotification() {
|
||||
return uploadingNotification;
|
||||
}
|
||||
|
||||
public AndroidElement getClearAllNotificationButton() {
|
||||
return clearAllNotificationButton;
|
||||
}
|
||||
|
||||
public void tapOnClearAllNotification () {
|
||||
clearAllNotificationButton.tap(1, 1000);
|
||||
}
|
||||
|
||||
public void tapOnBottomNotificationArea(){
|
||||
//TODO. it is not working
|
||||
notificationArea.getSize();
|
||||
notificationArea.tap(1, 1000);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
public class PassCodeRequestView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(0)")
|
||||
private AndroidElement codeElement1;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(1)")
|
||||
private AndroidElement codeElement2;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(2)")
|
||||
private AndroidElement codeElement3;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(3)")
|
||||
private AndroidElement codeElement4;
|
||||
|
||||
public PassCodeRequestView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void enterPasscode(String codeNumber1, String codeNumber2,
|
||||
String codeNumber3, String codeNumber4){
|
||||
codeElement1
|
||||
.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class PassCodeView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(0)")
|
||||
private AndroidElement codeElement1;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(1)")
|
||||
private AndroidElement codeElement2;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(2)")
|
||||
private AndroidElement codeElement3;
|
||||
|
||||
@AndroidFindBy(uiAutomator = "new UiSelector()"
|
||||
+ ".className(\"android.widget.EditText\").index(3)")
|
||||
private AndroidElement codeElement4;
|
||||
|
||||
@AndroidFindBy(name = "Cancel")
|
||||
private AndroidElement cancelButton;
|
||||
|
||||
public PassCodeView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public PassCodeView enterPasscode(String codeNumber1, String codeNumber2,
|
||||
String codeNumber3, String codeNumber4){
|
||||
codeElement1
|
||||
.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
|
||||
return this;
|
||||
}
|
||||
public SettingsView reenterPasscode(String codeNumber1,
|
||||
String codeNumber2, String codeNumber3, String codeNumber4){
|
||||
codeElement1
|
||||
.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
|
||||
SettingsView settingsView = new SettingsView(driver);
|
||||
return settingsView;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class RemoveConfirmationView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "Remote and local")
|
||||
private AndroidElement remoteAndLocalButton;
|
||||
|
||||
public RemoveConfirmationView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public WaitAMomentPopUp clickOnRemoteAndLocalButton () {
|
||||
remoteAndLocalButton.click();
|
||||
WaitAMomentPopUp waitAMomentPopUp = new WaitAMomentPopUp(driver);
|
||||
return waitAMomentPopUp;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import com.owncloud.android.test.ui.testSuites.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);
|
||||
}
|
||||
|
||||
public void tapOnAccountElement (int accountPosition, int fingers, int milliSeconds) {
|
||||
if(accountPosition==1)
|
||||
accountElement.tap(fingers, milliSeconds);
|
||||
else
|
||||
accountElement2.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;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class ShareView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@FindBy(id = "android:id/select_dialog_listview")
|
||||
private AndroidElement listViewLayout;
|
||||
|
||||
public ShareView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public AndroidElement getListViewLayout () {
|
||||
return listViewLayout;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
|
||||
public class UploadFilesView{
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/list_root")
|
||||
private AndroidElement filesLayout;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(id = "com.owncloud.android:id/upload_files_btn_upload")
|
||||
private AndroidElement uploadButton;
|
||||
|
||||
private AndroidElement fileElement;
|
||||
|
||||
public UploadFilesView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public FileListView clickOnUploadButton () {
|
||||
uploadButton.click();
|
||||
FileListView fileListView = new FileListView (driver);
|
||||
return fileListView;
|
||||
}
|
||||
|
||||
//change to scrollTillFindElement
|
||||
public void scrollTillFindFile (String fileName) {
|
||||
fileElement = Actions
|
||||
.scrollTillFindElement(fileName,filesLayout,driver);
|
||||
}
|
||||
|
||||
public void clickOnFileName (String fileName) {
|
||||
scrollTillFindFile(fileName);
|
||||
fileElement.click();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
import org.openqa.selenium.support.CacheLookup;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
public class UploadView {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@CacheLookup
|
||||
@AndroidFindBy(name = "Upload")
|
||||
private AndroidElement uploadButton;
|
||||
|
||||
public UploadView (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public void clickOUploadButton () {
|
||||
uploadButton.click();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.models;
|
||||
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
import io.appium.java_client.pagefactory.AndroidFindBy;
|
||||
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
|
||||
|
||||
public class WaitAMomentPopUp {
|
||||
final AndroidDriver driver;
|
||||
|
||||
@AndroidFindBy(name = "Wait a moment")
|
||||
private AndroidElement waitAMomentText;
|
||||
|
||||
public WaitAMomentPopUp (AndroidDriver driver) {
|
||||
this.driver = driver;
|
||||
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
|
||||
}
|
||||
|
||||
public AndroidElement getWaitAMomentTextElement () {
|
||||
return waitAMomentText;
|
||||
}
|
||||
}
|
1
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/.gitignore
vendored
Normal file
1
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
Config.java
|
|
@ -0,0 +1,203 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
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.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;
|
||||
|
||||
public class Common{
|
||||
AndroidDriver driver;
|
||||
static int waitingTime = 30;
|
||||
|
||||
public WebDriverWait wait;
|
||||
|
||||
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", "test");
|
||||
capabilities.setCapability("app", app.getAbsolutePath());
|
||||
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)
|
||||
return false;
|
||||
try{
|
||||
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);
|
||||
return true;
|
||||
} catch (NoSuchElementException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isElementPresent(AndroidElement element) {
|
||||
try{
|
||||
element.isDisplayed();
|
||||
} catch (NoSuchElementException e){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//pollingTime in milliseconds
|
||||
public static void waitTillElementIsNotPresent (AndroidElement element,
|
||||
int pollingTime) throws Exception {
|
||||
for (int time = 0;time <= waitingTime * 1000;time += pollingTime){
|
||||
try{
|
||||
element.isDisplayed();
|
||||
} catch (NoSuchElementException e){
|
||||
return;
|
||||
}
|
||||
Thread.sleep(pollingTime);
|
||||
}
|
||||
throw new TimeoutException();
|
||||
}
|
||||
|
||||
public static void waitTillElementIsNotPresentWithoutTimeout (
|
||||
AndroidElement element,int pollingTime)
|
||||
throws InterruptedException {
|
||||
for (int time = 0;time <= waitingTime * 1000;time += pollingTime){
|
||||
try{
|
||||
element.isDisplayed();
|
||||
} catch (NoSuchElementException e){
|
||||
return;
|
||||
}
|
||||
Thread.sleep(pollingTime);
|
||||
}
|
||||
}
|
||||
|
||||
public static void waitTillElementIsPresent (
|
||||
AndroidElement element,int pollingTime)
|
||||
throws InterruptedException {
|
||||
for (int time = 0;time <= waitingTime * 1000;time += pollingTime){
|
||||
try{
|
||||
if(element.isDisplayed()){
|
||||
return;
|
||||
}
|
||||
} catch (NoSuchElementException e){
|
||||
|
||||
}
|
||||
Thread.sleep(pollingTime);
|
||||
}
|
||||
}
|
||||
|
||||
protected void takeScreenShotOnFailed (String testName)
|
||||
throws IOException {
|
||||
File file = ((RemoteWebDriver) driver)
|
||||
.getScreenshotAs(OutputType.FILE);
|
||||
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Date today = Calendar.getInstance().getTime();
|
||||
String screenShotName = "ScreenShots/" + dt1.format(today) + "/"
|
||||
+ testName + ".png";
|
||||
FileUtils.copyFile(file, new File(screenShotName));
|
||||
}
|
||||
|
||||
protected void assertIsInFileListView() throws InterruptedException {
|
||||
//waitForTextPresent("Wrong username or password",
|
||||
// changePasswordForm.getAuthStatusText());
|
||||
Thread.sleep(2000);
|
||||
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 assertIsNotInFileListView() 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\")")));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
public final class Config {
|
||||
|
||||
//without http or https
|
||||
public static final String URL = "owncloudServerVar";
|
||||
public static boolean isTrusted = true;
|
||||
|
||||
//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 + "@"+ URL;
|
||||
public static final String userAccount2 = user2 + "@"+ URL2;
|
||||
|
||||
public static final String gmailAccount = "gmailAccountVar";
|
||||
|
||||
public static final String fileWhichIsInTheServer1 ="test";
|
||||
public static final String fileWhichIsInTheServer2 ="test";
|
||||
|
||||
public static final String fileToTestName = "test";
|
||||
public static final String fileToTestSendByEmailName = "test";
|
||||
public static final String bigFileToTestName = "test";
|
||||
|
||||
public static final String passcode1 = "passcode1";
|
||||
public static final String passcode2 = "passcode2";
|
||||
public static final String passcode3 = "passcode3";
|
||||
public static final String passcode4 = "passcode4";
|
||||
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
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 {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testCreateNewFolder () throws Exception {
|
||||
String NEW_FOLDER_NAME = "testCreateFolder";
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL,
|
||||
Config.user,Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//check if the folder already exists and if true, delete them
|
||||
Actions.deleteElement(NEW_FOLDER_NAME, fileListView, driver);
|
||||
|
||||
WaitAMomentPopUp waitAMomentPopUp = Actions
|
||||
.createFolder(NEW_FOLDER_NAME, fileListView);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_NAME);
|
||||
assertNotNull(fileListView.getFileElement());
|
||||
assertTrue(
|
||||
folderHasBeenCreated=fileListView.getFileElement().isDisplayed());
|
||||
CurrentCreatedFolder = FOLDER_NAME;
|
||||
assertEquals(FOLDER_NAME , fileListView.getFileElement().getText());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
if (folderHasBeenCreated) {
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
Actions.deleteElement(CurrentCreatedFolder, fileListView, driver);
|
||||
}
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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.By;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class DeleteFileTestSuite{
|
||||
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
private final String FILE_NAME = Config.fileToTestName;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testDeleteFile () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the file already exists, do not upload
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
fileListViewAfterUploadFile.getProgressCircular(), 1000);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))));
|
||||
|
||||
Actions.deleteElement(FILE_NAME,fileListViewAfterUploadFile, driver);
|
||||
assertFalse(fileListViewAfterUploadFile.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
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 {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testDeleteFolder () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the folder already exists, do no created
|
||||
//create the folder
|
||||
WaitAMomentPopUp waitAMomentPopUp = Actions
|
||||
.createFolder(FOLDER_NAME, fileListView);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_NAME);
|
||||
assertTrue(
|
||||
folderHasBeenCreated = fileListView.getFileElement().isDisplayed());
|
||||
|
||||
//delete the folder
|
||||
Actions.deleteElement(FOLDER_NAME, fileListView, driver);
|
||||
assertFalse(
|
||||
folderHasBeenCreated =fileListView.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
if(folderHasBeenCreated){
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
Actions.deleteElement(FOLDER_NAME, fileListView, driver);
|
||||
}
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,181 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.*;
|
||||
import com.owncloud.android.test.ui.models.LoginForm;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MenuList;
|
||||
import com.owncloud.android.test.ui.models.SettingsView;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class LoginTestSuite{
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void test1LoginPortrait () throws Exception {
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
|
||||
Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void test2LoginLandscape () throws Exception {
|
||||
driver.rotate(ScreenOrientation.LANDSCAPE);
|
||||
Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testLoginAndShowFiles () throws Exception {
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
fileListView.scrollTillFindElement(Config.fileWhichIsInTheServer1);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void test3MultiAccountRotate () throws Exception {
|
||||
driver.rotate(ScreenOrientation.LANDSCAPE);
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
MenuList menu = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menu.clickOnSettingsButton();
|
||||
|
||||
settingsView.tapOnAddAccount(1, 1000);
|
||||
fileListView = Actions.login(Config.URL2, Config.user2,
|
||||
Config.password2, Config.isTrusted2, driver);
|
||||
common.assertIsInSettingsView();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testMultiAccountAndShowFiles () throws Exception {
|
||||
driver.rotate(ScreenOrientation.LANDSCAPE);
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
fileListView.scrollTillFindElement(Config.fileWhichIsInTheServer1);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
MenuList menu = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menu.clickOnSettingsButton();
|
||||
|
||||
settingsView.tapOnAddAccount(1, 1000);
|
||||
fileListView = Actions.login(Config.URL2, Config.user2,
|
||||
Config.password2, Config.isTrusted2, driver);
|
||||
common.assertIsInSettingsView();
|
||||
settingsView.tapOnAccountElement(2,1, 100);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
fileListView.scrollTillFindElement(Config.fileWhichIsInTheServer2);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void test4ExistingAccountRotate () throws Exception {
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
driver.rotate(ScreenOrientation.LANDSCAPE);
|
||||
MenuList menu = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menu.clickOnSettingsButton();
|
||||
settingsView.tapOnAddAccount(1, 1000);
|
||||
|
||||
LoginForm loginForm = new LoginForm(driver);
|
||||
fileListView = Actions.login(Config.URL, Config.user,Config.password,
|
||||
Config.isTrusted, driver);
|
||||
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);
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
MenuList menu = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menu.clickOnSettingsButton();
|
||||
settingsView.tapOnAccountElement(1,1, 1000);
|
||||
LoginForm changePasswordForm = settingsView
|
||||
.clickOnChangePasswordElement();
|
||||
changePasswordForm.typePassword("WrongPassword");
|
||||
changePasswordForm.clickOnConnectButton();
|
||||
assertTrue(common.waitForTextPresent("Wrong username or password",
|
||||
changePasswordForm.getAuthStatusText()));
|
||||
}
|
||||
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.LoginForm;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MenuList;
|
||||
import com.owncloud.android.test.ui.models.SettingsView;
|
||||
|
||||
public class LogoutTestSuite{
|
||||
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testLogout () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
MenuList menulist = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menulist.clickOnSettingsButton();
|
||||
settingsView.tapOnAccountElement(1,1, 1000);
|
||||
LoginForm loginForm = settingsView.clickOnDeleteAccountElement();
|
||||
assertEquals("Server address https://…",
|
||||
loginForm.gethostUrlInput().getText());
|
||||
assertEquals("Username", loginForm.getUserNameInput().getText());
|
||||
assertEquals("", loginForm.getPasswordInput().getText());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
//driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MoveView;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class MoveFileTestSuite{
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
private String FOLDER_WHERE_MOVE = "folderWhereMove";
|
||||
private String FILE_NAME = Config.fileToTestName;
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testMoveFile () throws Exception {
|
||||
WaitAMomentPopUp waitAMomentPopUp;
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
//fileListView.getProgressCircular(), 1000);
|
||||
|
||||
//check if the folder already exists and if true, delete them
|
||||
Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
|
||||
Actions.deleteElement(FILE_NAME, fileListView, driver);
|
||||
|
||||
//Create the folder where the other is gone to be moved
|
||||
waitAMomentPopUp = Actions
|
||||
.createFolder(FOLDER_WHERE_MOVE, fileListView);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
|
||||
|
||||
//select to move the file
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(FILE_NAME);
|
||||
MoveView moveView = menuOptions.clickOnMove();
|
||||
|
||||
//to move to a folder
|
||||
moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
|
||||
waitAMomentPopUp = moveView.clickOnChoose();
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
|
||||
//check that the folder moved is inside the other
|
||||
fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(),
|
||||
1000);
|
||||
Thread.sleep(1000);
|
||||
fileListView.scrollTillFindElement(FILE_NAME);
|
||||
assertEquals(FILE_NAME , fileListView.getFileElement().getText());
|
||||
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
|
||||
Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
|
||||
Actions.deleteElement(FILE_NAME, fileListView, driver);
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MoveView;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
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 {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testMoveFolder () throws Exception {
|
||||
WaitAMomentPopUp waitAMomentPopUp;
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
//fileListView.getProgressCircular(), 1000);
|
||||
|
||||
//check if the folder already exists and if true, delete them
|
||||
Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
|
||||
Actions.deleteElement(FOLDER_TO_MOVE, fileListView, driver);
|
||||
|
||||
//Create the folder where the other is gone to be moved
|
||||
waitAMomentPopUp = Actions
|
||||
.createFolder(FOLDER_WHERE_MOVE, fileListView);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
|
||||
//Create the folder which is going to be moved
|
||||
waitAMomentPopUp = Actions.createFolder(FOLDER_TO_MOVE, fileListView);
|
||||
Common.waitTillElementIsNotPresent(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_TO_MOVE);
|
||||
assertTrue(fileListView.getFileElement().isDisplayed());
|
||||
|
||||
//select to move the folder
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(FOLDER_TO_MOVE);
|
||||
MoveView moveView = menuOptions.clickOnMove();
|
||||
|
||||
//to move to a folder
|
||||
moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
|
||||
waitAMomentPopUp = moveView.clickOnChoose();
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
|
||||
//check that the folder moved is inside the other
|
||||
fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(),
|
||||
1000);
|
||||
Thread.sleep(1000);
|
||||
fileListView.scrollTillFindElement(FOLDER_TO_MOVE);
|
||||
assertEquals(FOLDER_TO_MOVE , fileListView.getFileElement().getText());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
|
||||
Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
|
||||
Actions.deleteElement(FOLDER_TO_MOVE, fileListView, driver);
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 org.openqa.selenium.ScreenOrientation;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.MenuList;
|
||||
import com.owncloud.android.test.ui.models.PassCodeRequestView;
|
||||
import com.owncloud.android.test.ui.models.PassCodeView;
|
||||
import com.owncloud.android.test.ui.models.SettingsView;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class PasscodeTestSuite {
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void testPincodeEnable () throws Exception {
|
||||
driver.rotate(ScreenOrientation.PORTRAIT);
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
MenuList menu = fileListView.clickOnMenuButton();
|
||||
SettingsView settingsView = menu.clickOnSettingsButton();
|
||||
|
||||
PassCodeView passCodeview = settingsView.EnablePassCode();
|
||||
PassCodeView passCodeview2 = passCodeview.enterPasscode(
|
||||
Config.passcode1, Config.passcode2, Config.passcode3,
|
||||
Config.passcode4);
|
||||
passCodeview2.reenterPasscode(Config.passcode1, Config.passcode2,
|
||||
Config.passcode3, Config.passcode4);
|
||||
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_HOME);
|
||||
//TO DO. Open the app instead of start an activity
|
||||
driver.startActivity("com.owncloud.android",
|
||||
".ui.activity.FileDisplayActivity");
|
||||
//here we check that we are not in the fileDisplayActivity,
|
||||
//because pincode is asked
|
||||
common.assertIsNotInFileListView();
|
||||
common.assertIsPasscodeRequestView();
|
||||
|
||||
PassCodeRequestView passCodeReequestView = new
|
||||
PassCodeRequestView(driver);
|
||||
passCodeReequestView.enterPasscode(Config.passcode1, Config.passcode2,
|
||||
Config.passcode3, Config.passcode4);
|
||||
common.assertIsInFileListView();
|
||||
}
|
||||
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.UnfinishedTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class RefreshFolderTestSuite{
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Category({UnfinishedTestCategory.class})
|
||||
public void testPulldownToRefreshFolder () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
//TODO. Remove the sleep and check why is not working the assert
|
||||
//when using waitTillElementIsNotPresent
|
||||
Thread.sleep(5000);
|
||||
//waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(), 1000);
|
||||
fileListView.pulldownToRefresh();
|
||||
assertTrue(fileListView.getProgressCircular().isDisplayed());
|
||||
//TODO insert a file in the web, and check that it's shown here
|
||||
}
|
||||
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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.By;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.NewFolderPopUp;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class RenameFileTestSuite{
|
||||
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
private Boolean fileHasBeenCreated = false;
|
||||
private final String OLD_FILE_NAME = Config.fileToTestName;
|
||||
private final String FILE_NAME = "newNameFile";
|
||||
private String CurrentCreatedFile = "";
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testRenameFile () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the file already exists, do not upload
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(OLD_FILE_NAME, fileListView);
|
||||
|
||||
//check if the file with the new name already exists, if true delete it
|
||||
Actions.deleteElement(FILE_NAME, fileListView, driver);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(OLD_FILE_NAME);
|
||||
assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
CurrentCreatedFile = OLD_FILE_NAME;
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListViewAfterUploadFile
|
||||
.getProgressCircular(), 1000);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))));
|
||||
ElementMenuOptions menuOptions = fileListViewAfterUploadFile
|
||||
.longPressOnElement(OLD_FILE_NAME);
|
||||
NewFolderPopUp newFolderPopUp = menuOptions.clickOnRename();
|
||||
newFolderPopUp.typeNewFolderName(FILE_NAME);
|
||||
WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp
|
||||
.clickOnNewFolderOkButton();
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertNotNull(fileListViewAfterUploadFile.getFileElement());
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
|
||||
assertEquals(FILE_NAME , fileListViewAfterUploadFile.getFileElement()
|
||||
.getText());
|
||||
CurrentCreatedFile = FILE_NAME;
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
if (fileHasBeenCreated) {
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
Actions.deleteElement(CurrentCreatedFile,fileListView, driver);
|
||||
}
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.NewFolderPopUp;
|
||||
import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
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 {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testRenameFolder () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the folder already exists, do no created
|
||||
//create the folder to rename
|
||||
WaitAMomentPopUp waitAMomentPopUp = Actions
|
||||
.createFolder(OLD_FOLDER_NAME, fileListView);
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
waitAMomentPopUp.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(OLD_FOLDER_NAME);
|
||||
|
||||
assertTrue(
|
||||
folderHasBeenCreated = fileListView.getFileElement().isDisplayed());
|
||||
|
||||
//check if the folder with the new name already exists
|
||||
//and if true, delete them
|
||||
Actions.deleteElement(FOLDER_NAME, fileListView, driver);
|
||||
|
||||
CurrentCreatedFolder = OLD_FOLDER_NAME;
|
||||
ElementMenuOptions menuOptions = fileListView
|
||||
.longPressOnElement(OLD_FOLDER_NAME);
|
||||
NewFolderPopUp FolderPopUp = menuOptions.clickOnRename();
|
||||
FolderPopUp.typeNewFolderName(FOLDER_NAME);
|
||||
FolderPopUp.clickOnNewFolderOkButton();
|
||||
CurrentCreatedFolder = FOLDER_NAME;
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(waitAMomentPopUp
|
||||
.getWaitAMomentTextElement(), 100);
|
||||
fileListView.scrollTillFindElement(FOLDER_NAME);
|
||||
assertNotNull(fileListView.getFileElement());
|
||||
assertTrue(
|
||||
folderHasBeenCreated = fileListView.getFileElement().isDisplayed());
|
||||
assertEquals(FOLDER_NAME , fileListView.getFileElement().getText());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
if(folderHasBeenCreated){
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
Actions.deleteElement(CurrentCreatedFolder, fileListView, driver);
|
||||
}
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
|
||||
import org.junit.experimental.categories.Categories.ExcludeCategory;
|
||||
import org.junit.experimental.categories.Categories.IncludeCategory;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import com.owncloud.android.test.ui.groups.FailingTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
|
||||
|
||||
|
||||
@RunWith(FlexibleCategories.class)
|
||||
@ExcludeCategory(NoIgnoreTestCategory.class)
|
||||
@IncludeCategory(FailingTestCategory.class)
|
||||
@TestScanPackage("com.owncloud.android.test.ui.testSuites")
|
||||
@TestClassPrefix("")
|
||||
@TestClassSuffix("TestSuite")
|
||||
public class RunFailingTests {
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
import org.junit.experimental.categories.Categories.IncludeCategory;
|
||||
import org.junit.runner.RunWith;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories;
|
||||
import com.owncloud.android.test.ui.groups.InProgressCategory;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
|
||||
|
||||
|
||||
@RunWith(FlexibleCategories.class)
|
||||
@IncludeCategory(InProgressCategory.class)
|
||||
@TestScanPackage("com.owncloud.android.test.ui.testSuites")
|
||||
@TestClassPrefix("")
|
||||
@TestClassSuffix("TestSuite")
|
||||
public class RunInProgressTest {
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
import org.junit.experimental.categories.Categories.ExcludeCategory;
|
||||
import org.junit.experimental.categories.Categories.IncludeCategory;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories;
|
||||
import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
|
||||
|
||||
|
||||
@RunWith(FlexibleCategories.class)
|
||||
@ExcludeCategory(IgnoreTestCategory.class)
|
||||
@IncludeCategory(NoIgnoreTestCategory.class)
|
||||
@TestScanPackage("com.owncloud.android.test.ui.testSuites")
|
||||
@TestClassPrefix("")
|
||||
@TestClassSuffix("TestSuite")
|
||||
public class RunNoIgnoreTests {
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
import org.junit.experimental.categories.Categories.ExcludeCategory;
|
||||
import org.junit.experimental.categories.Categories.IncludeCategory;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories;
|
||||
import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
|
||||
import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
|
||||
|
||||
|
||||
@RunWith(FlexibleCategories.class)
|
||||
@ExcludeCategory(IgnoreTestCategory.class)
|
||||
@IncludeCategory(SmokeTestCategory.class)
|
||||
@TestScanPackage("com.owncloud.android.test.ui.testSuites")
|
||||
@TestClassPrefix("")
|
||||
@TestClassSuffix("TestSuite")
|
||||
public class RunSmokeTests {
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import io.appium.java_client.android.AndroidDriver;
|
||||
import io.appium.java_client.android.AndroidElement;
|
||||
|
||||
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 com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.InProgressCategory;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileListView;;
|
||||
|
||||
public class ShareLinkFileTestSuite{
|
||||
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
private final String FILE_NAME = Config.fileToTestName;
|
||||
private Boolean fileHasBeenCreated = false;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void testShareLinkFileByGmail () throws Exception {
|
||||
AndroidElement sharedElementIndicator;
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the file already exists, do not upload
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
|
||||
sharedElementIndicator = Actions.shareLinkElementByGmail(FILE_NAME,
|
||||
fileListViewAfterUploadFile,driver,common);
|
||||
assertTrue(sharedElementIndicator.isDisplayed());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testShareLinkFileByCopyLink () throws Exception {
|
||||
AndroidElement sharedElementIndicator;
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the file already exists, do not upload
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
|
||||
sharedElementIndicator = Actions.shareLinkElementByCopyLink(FILE_NAME,
|
||||
fileListViewAfterUploadFile,driver,common);
|
||||
assertTrue(sharedElementIndicator.isDisplayed());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({IgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testUnshareLinkFile () throws Exception {
|
||||
AndroidElement sharedElementIndicator;
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//TODO. if the file already exists, do not upload
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
|
||||
sharedElementIndicator = Actions.shareLinkElementByCopyLink(FILE_NAME,
|
||||
fileListViewAfterUploadFile,driver,common);
|
||||
assertTrue(sharedElementIndicator.isDisplayed());
|
||||
Actions.unshareLinkElement(FILE_NAME,
|
||||
fileListViewAfterUploadFile,driver,common);
|
||||
assertFalse(sharedElementIndicator.isDisplayed());
|
||||
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
if (fileHasBeenCreated) {
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
Actions.deleteElement(FILE_NAME,fileListView, driver);
|
||||
}
|
||||
driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,285 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* @author purigarcia
|
||||
* Copyright (C) 2015 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.test.ui.testSuites;
|
||||
|
||||
|
||||
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;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
import com.owncloud.android.test.ui.actions.Actions;
|
||||
import com.owncloud.android.test.ui.groups.FailingTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.InProgressCategory;
|
||||
import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.SmokeTestCategory;
|
||||
import com.owncloud.android.test.ui.groups.UnfinishedTestCategory;
|
||||
import com.owncloud.android.test.ui.models.FileDetailsView;
|
||||
import com.owncloud.android.test.ui.models.ElementMenuOptions;
|
||||
import com.owncloud.android.test.ui.models.GmailEmailListView;
|
||||
import com.owncloud.android.test.ui.models.GmailEmailView;
|
||||
import com.owncloud.android.test.ui.models.ImageView;
|
||||
import com.owncloud.android.test.ui.models.FileListView;
|
||||
import com.owncloud.android.test.ui.models.NotificationView;
|
||||
import com.owncloud.android.test.ui.models.SettingsView;
|
||||
import com.owncloud.android.test.ui.models.UploadView;
|
||||
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public class UploadTestSuite{
|
||||
|
||||
AndroidDriver driver;
|
||||
Common common;
|
||||
String FILE_NAME = Config.fileToTestName;
|
||||
String BIG_FILE_NAME = Config.bigFileToTestName;
|
||||
String FILE_GMAIL_NAME = Config.fileToTestSendByEmailName;
|
||||
private Boolean fileHasBeenUploadedFromGmail = false;
|
||||
private Boolean fileHasBeenUploaded = false;
|
||||
|
||||
@Rule public TestName name = new TestName();
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
common=new Common();
|
||||
driver=common.setUpCommonDriver();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
|
||||
public void testUploadFile () throws Exception {
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//check if the file already exists and if true, delete it
|
||||
Actions.deleteElement(FILE_NAME, fileListView, driver);
|
||||
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
fileListViewAfterUploadFile.getProgressCircular(), 1000);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))));
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))
|
||||
.isDisplayed());
|
||||
fileListView = new FileListView(driver);
|
||||
fileListView.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(
|
||||
fileHasBeenUploaded = fileListView.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
@Category({UnfinishedTestCategory.class})
|
||||
public void testUploadBigFile () throws Exception {
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
//check if the file already exists and if true, delete it
|
||||
Actions.deleteElement(BIG_FILE_NAME, fileListView, driver);
|
||||
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(BIG_FILE_NAME, fileListView);
|
||||
|
||||
|
||||
driver.openNotifications();
|
||||
NotificationView notificationView = new NotificationView(driver);
|
||||
|
||||
try{
|
||||
if(notificationView.getUploadingNotification().isDisplayed()){
|
||||
Common.waitTillElementIsPresent(
|
||||
notificationView.getUploadSucceededNotification(),300000);
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_HOME);
|
||||
driver.startActivity("com.owncloud.android",
|
||||
".ui.activity.FileDisplayActivity");
|
||||
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_HOME);
|
||||
driver.startActivity("com.owncloud.android",
|
||||
".ui.activity.FileDisplayActivity");
|
||||
}
|
||||
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(BIG_FILE_NAME);
|
||||
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
|
||||
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(
|
||||
fileListViewAfterUploadFile.getProgressCircular(), 1000);
|
||||
common.wait.until(ExpectedConditions.visibilityOf(
|
||||
fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))));
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getLocalFileIndicator()))
|
||||
.isDisplayed());
|
||||
fileListView = new FileListView(driver);
|
||||
fileListView.scrollTillFindElement(BIG_FILE_NAME);
|
||||
assertTrue(
|
||||
fileHasBeenUploaded = fileListView.getFileElement().isDisplayed());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Category(UnfinishedTestCategory.class)
|
||||
public void testUploadFromGmail () throws Exception {
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
driver.startActivity("com.google.android.gm",
|
||||
".ConversationListActivityGmail");
|
||||
GmailEmailListView gmailEmailListView = new GmailEmailListView(driver);
|
||||
Thread.sleep(3000);
|
||||
GmailEmailView gmailEmailView = gmailEmailListView.clickOnEmail();
|
||||
ImageView imageView = gmailEmailView.clickOnfileButton();
|
||||
imageView.clickOnOptionsButton();
|
||||
imageView.clickOnShareButton();
|
||||
imageView.clickOnOwnCloudButton();
|
||||
//justonce button do not appear always
|
||||
try{
|
||||
imageView.clickOnJustOnceButton();
|
||||
}catch (NoSuchElementException e) {
|
||||
}
|
||||
UploadView uploadView = new UploadView(driver);
|
||||
uploadView.clickOUploadButton();
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_HOME);
|
||||
driver.startActivity("com.owncloud.android",
|
||||
".ui.activity.FileDisplayActivity");
|
||||
common.wait.until(ExpectedConditions
|
||||
.visibilityOfAllElementsLocatedBy(By.name(FILE_GMAIL_NAME)));
|
||||
assertEquals(Config.fileToTestSendByEmailName ,
|
||||
driver.findElementByName(FILE_GMAIL_NAME).getText());
|
||||
fileListView = new FileListView(driver);
|
||||
fileListView.scrollTillFindElement(FILE_GMAIL_NAME);
|
||||
assertTrue(fileHasBeenUploadedFromGmail = fileListView
|
||||
.getFileElement().isDisplayed());
|
||||
//TODO. correct assert if fileListView is shown in grid mode
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Category({FailingTestCategory.class})
|
||||
public void testKeepFileUpToDate () throws Exception {
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(),
|
||||
1000);
|
||||
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileHasBeenUploaded = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
|
||||
ElementMenuOptions menuOptions = fileListViewAfterUploadFile
|
||||
.longPressOnElement(FILE_NAME);
|
||||
FileDetailsView fileDetailsView = menuOptions.clickOnDetails();
|
||||
fileDetailsView.checkKeepFileUpToDateCheckbox();
|
||||
Thread.sleep(3000);
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
|
||||
assertTrue(common.isElementPresent(
|
||||
fileListViewAfterUploadFile.getFileElementLayout(),
|
||||
MobileBy.id(FileListView.getFavoriteFileIndicator())));
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getFavoriteFileIndicator()))
|
||||
.isDisplayed());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Category({NoIgnoreTestCategory.class})
|
||||
public void testKeepFileUpToDateAndRefresh () throws Exception {
|
||||
|
||||
FileListView fileListView = Actions.login(Config.URL, Config.user,
|
||||
Config.password, Config.isTrusted, driver);
|
||||
common.assertIsInFileListView();
|
||||
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(),
|
||||
1000);
|
||||
|
||||
FileListView fileListViewAfterUploadFile = Actions
|
||||
.uploadFile(FILE_NAME, fileListView);
|
||||
fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
|
||||
assertTrue(fileHasBeenUploaded = fileListViewAfterUploadFile
|
||||
.getFileElement().isDisplayed());
|
||||
|
||||
ElementMenuOptions menuOptions = fileListViewAfterUploadFile
|
||||
.longPressOnElement(FILE_NAME);
|
||||
FileDetailsView fileDetailsView = menuOptions.clickOnDetails();
|
||||
fileDetailsView.checkKeepFileUpToDateCheckbox();
|
||||
Thread.sleep(3000);
|
||||
driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
|
||||
|
||||
fileListViewAfterUploadFile.pulldownToRefresh();
|
||||
//assertTrue(fileListView.getProgressCircular().isDisplayed());
|
||||
Common.waitTillElementIsNotPresentWithoutTimeout(fileListView.getProgressCircular(),
|
||||
100);
|
||||
|
||||
assertTrue(common.isElementPresent(
|
||||
fileListViewAfterUploadFile.getFileElementLayout(),
|
||||
MobileBy.id(FileListView.getFavoriteFileIndicator())));
|
||||
assertTrue(fileListViewAfterUploadFile.getFileElementLayout()
|
||||
.findElement(By.id(FileListView.getFavoriteFileIndicator()))
|
||||
.isDisplayed());
|
||||
}
|
||||
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
common.takeScreenShotOnFailed(name.getMethodName());
|
||||
FileListView fileListView = new FileListView(driver);
|
||||
if (fileHasBeenUploadedFromGmail) {
|
||||
Actions.deleteElement(FILE_GMAIL_NAME,fileListView, driver);
|
||||
}
|
||||
if(fileHasBeenUploaded){
|
||||
Actions.deleteElement(FILE_NAME,fileListView, driver);
|
||||
Actions.deleteElement(BIG_FILE_NAME,fileListView, driver);
|
||||
}
|
||||
|
||||
//driver.removeApp("com.owncloud.android");
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
4
automationTest/src/test/resources/.gitignore
vendored
Normal file
4
automationTest/src/test/resources/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
|
@ -21,7 +21,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F7F7F7"
|
||||
android:orientation="vertical" >
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="fill_parent"
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
android:background="@color/background_color"
|
||||
android:orientation="horizontal"
|
||||
android:baselineAligned="false"
|
||||
android:id="@+id/ListLayout"
|
||||
android:contentDescription="@string/list_layout"
|
||||
>
|
||||
|
||||
<FrameLayout
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
<string name="filedetails_download">Download</string>
|
||||
<string name="filedetails_sync_file">Refresh file</string>
|
||||
<string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
|
||||
<string name="list_layout">List Layout</string>
|
||||
<string name="action_share_file">Share link</string>
|
||||
<string name="action_unshare_file">Unshare link</string>
|
||||
<string name="common_yes">Yes</string>
|
||||
|
|
Loading…
Reference in a new issue