MainView.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package androidtest.models;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import io.appium.java_client.android.AndroidDriver;
  5. import io.appium.java_client.android.AndroidElement;
  6. import io.appium.java_client.pagefactory.AndroidFindBy;
  7. import io.appium.java_client.pagefactory.AppiumFieldDecorator;
  8. import org.openqa.selenium.remote.RemoteWebElement;
  9. import org.openqa.selenium.support.CacheLookup;
  10. import org.openqa.selenium.support.PageFactory;
  11. public class MainView {
  12. final AndroidDriver driver;
  13. @CacheLookup
  14. @AndroidFindBy(uiAutomator = "new UiSelector().description(\"More options\")")
  15. private AndroidElement menuButton;
  16. @CacheLookup
  17. @AndroidFindBy(id = "com.owncloud.android:id/list_root")
  18. private AndroidElement filesLayout;
  19. @CacheLookup
  20. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/action_bar_title\")")
  21. private AndroidElement titleText;
  22. @AndroidFindBy(name = "Settings")
  23. private AndroidElement settingsButton;
  24. @CacheLookup
  25. @AndroidFindBy(uiAutomator = "new UiSelector().description(\"New folder\")")
  26. private AndroidElement newFolderButton;
  27. @CacheLookup
  28. @AndroidFindBy(uiAutomator = "new UiSelector().description(\"Upload\")")
  29. private AndroidElement uploadButton;
  30. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"com.owncloud.android:id/user_input\")")
  31. private AndroidElement newFolderNameField;
  32. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/button1\")")
  33. private AndroidElement newFolderOkButton;
  34. private AndroidElement waitAMomentText;
  35. @AndroidFindBy(id = "com.owncloud.android:id/ListItemLayout")
  36. private List<AndroidElement> listItemLayout;
  37. @AndroidFindBy(id = "com.owncloud.android:id/list_root")
  38. private AndroidElement listRootLayout;
  39. @AndroidFindBy(name = "Remove")
  40. private AndroidElement removeFileElement;
  41. @AndroidFindBy(name = "Details")
  42. private AndroidElement detailsFileElement;
  43. @AndroidFindBy(name = "Remote and local")
  44. private AndroidElement remoteAndLocalButton;
  45. @AndroidFindBy(name = "Files")
  46. private AndroidElement filesElementUploadFile;
  47. private AndroidElement fileElement;
  48. private AndroidElement fileElementLayout;
  49. public MainView (AndroidDriver driver) {
  50. this.driver = driver;
  51. PageFactory.initElements(new AppiumFieldDecorator(driver), this);
  52. }
  53. public void clickOnMenuButton () {
  54. //TODO. DETECT WHEN HAPPENS WHEN THERE IS NOT BUTTON IN THE TOPBAR
  55. //if(menuButton.exists()){
  56. //menuButton.click();
  57. //}else{
  58. //Thread.sleep(10000);
  59. //getUiDevice().pressMenu();
  60. //}
  61. menuButton.click();
  62. }
  63. public SettingsView clickOnSettingsButton () {
  64. settingsButton.click();
  65. SettingsView settingsView = new SettingsView(driver);
  66. return settingsView;
  67. }
  68. public SettingsView getSettingsView () {
  69. SettingsView settingsView = new SettingsView(driver);
  70. return settingsView;
  71. }
  72. public void clickOnNewFolderButton () {
  73. newFolderButton.click();
  74. }
  75. public void clickOnRemoveFileElement () {
  76. removeFileElement.click();
  77. }
  78. public AppDetailsView clickOnDetailsFileElement () {
  79. detailsFileElement.click();
  80. AppDetailsView appDetailsView = new AppDetailsView(driver);
  81. return appDetailsView;
  82. }
  83. public void typeNewFolderName (String newFolderName) {
  84. newFolderNameField.clear();
  85. newFolderNameField.sendKeys(newFolderName);
  86. driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
  87. }
  88. public void clickOnNewFolderOkButton () {
  89. newFolderOkButton.click();
  90. waitAMomentText = (AndroidElement) driver.findElementByName("Wait a moment");
  91. }
  92. public void clickOnRemoteAndLocalButton () {
  93. remoteAndLocalButton.click();
  94. waitAMomentText = (AndroidElement) driver.findElementByName("Wait a moment");
  95. }
  96. public void clickOnUploadButton () {
  97. uploadButton.click();
  98. }
  99. public FilesView clickOnFilesElementUploadFile () {
  100. filesElementUploadFile.click();
  101. FilesView filesView = new FilesView(driver);
  102. return filesView;
  103. }
  104. public AndroidElement getTitleTextElement () {
  105. return titleText;
  106. }
  107. public AndroidElement getWaitAMomentTextElement () {
  108. return waitAMomentText;
  109. }
  110. public AndroidElement getListRootElement () {
  111. return listRootLayout;
  112. }
  113. public List<AndroidElement> getListItemLayout () {
  114. return listItemLayout;
  115. }
  116. public AndroidElement getFileElement () {
  117. return fileElement;
  118. }
  119. public void tapOnFileElement (String fileName) {
  120. scrollTillFindElement(fileName);
  121. fileElement.tap(1, 1000);
  122. }
  123. public AndroidElement scrollTillFindElement (String fileName) {
  124. HashMap<String, String> scrollObject = new HashMap<String, String>();
  125. scrollObject.put("text", fileName);
  126. scrollObject.put("element", ( (RemoteWebElement) filesLayout).getId());
  127. if(filesLayout.getAttribute("scrollable").equals("true")){
  128. driver.executeScript("mobile: scrollTo", scrollObject);
  129. }
  130. fileElement = (AndroidElement) driver.findElementByName(fileName);
  131. fileElementLayout = (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().description(\"LinearLayout-"+ fileName +"\")");
  132. return fileElement;
  133. }
  134. public AndroidElement getFileElementLayout () {
  135. return fileElementLayout;
  136. }
  137. }