以下代码使用ApiDemos-debug.apk进行测试

//这个脚本用于演示PageFactory的功能:使用注解@AndroidFindAll定位元素。注解用法参考页面类代码。

  1. package com.saucelabs.appium;
  2.  
  3. import io.appium.java_client.MobileElement;
  4. import io.appium.java_client.android.AndroidDriver;
  5. import io.appium.java_client.pagefactory.AppiumFieldDecorator;
  6. import io.appium.java_client.remote.MobileCapabilityType;
  7.  
  8. import java.io.File;
  9. import java.net.URL;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. import org.junit.After;
  13. import org.junit.Assert;
  14. import org.junit.Before;
  15. import org.junit.Test;
  16. import org.openqa.selenium.WebDriver;
  17. import org.openqa.selenium.remote.DesiredCapabilities;
  18. import org.openqa.selenium.support.PageFactory;
  19.  
  20. import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenByAllPossible;
  21. import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenChaided;
  22. import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;
  23. import com.saucelabs.appium.page_object.ios.TestAppScreenSimple;
  24.  
  25. /**
  26. * Please read about Page Object design pattern here:
  27. * https://code.google.com/p/selenium/wiki/PageObjects
  28. *
  29. * Please look at:
  30. * {@link ApiDemosListViewScreenSimple}
  31. * {@link ApiDemosListViewScreenChaided}
  32. * {@link ApiDemosListViewScreenByAllPossible}
  33. * {@link TestAppScreenSimple}
  34. *
  35. */
  36. public class AndroidPageObjectTest_ByAllPossible {
  37.  
  38. private WebDriver driver;
  39. private ApiDemosListViewScreenByAllPossible apiDemosPageObject;
  40.  
  41. @Before
  42. public void setUp() throws Exception {
  43. //File classpathRoot = new File(System.getProperty("user.dir"));
  44. File appDir = new File("E:/package");
  45. File app = new File(appDir, "ApiDemos-debug.apk");
  46. DesiredCapabilities capabilities = new DesiredCapabilities();
  47. capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
  48. capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
  49. driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  50.  
  51. apiDemosPageObject = new ApiDemosListViewScreenByAllPossible();
  52. PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS),
  53. apiDemosPageObject);
  54. }
  55.  
  56. @After
  57. public void tearDown() throws Exception {
  58. driver.quit();
  59. }
  60.  
  61. /**
  62. * Page Object best practice is to describe interactions with target
  63. * elements by methods. These methods describe business logic of the page/screen.
  64. * Here test interacts with lazy instantiated elements directly.
  65. * It was done so just for obviousness
  66. */
  67.  
  68. @Test
  69. public void findAllElementTest(){
  70. Assert.assertNotEquals(null, apiDemosPageObject.findAllElementView.getAttribute("text"));
  71. }
  72.  
  73. @Test
  74. public void findAllElementsTest(){
  75. Assert.assertNotEquals(0, apiDemosPageObject.findAllElementViews.size());
  76. }
  77. }

下面是页面类的代码:

  1. package com.saucelabs.appium.page_object.android;
  2.  
  3. import io.appium.java_client.MobileElement;
  4.  
  5. import java.util.List;
  6.  
  7. import io.appium.java_client.android.AndroidElement;
  8. import io.appium.java_client.pagefactory.AndroidFindAll;
  9. import io.appium.java_client.pagefactory.AndroidFindBy;
  10.  
  11. /**
  12. *
  13. * Here is the common sample shows how to use
  14. * {@link AndroidFindAll} annotation to describe all possible
  15. * locators of a target element. This feature should help to
  16. * reduce the number of page PageObject-classes
  17. *
  18. * It demonstrates how to declare screen elements using Appium
  19. * page objects facilities.
  20. *
  21. * About Page Object design pattern read here:
  22. * https://code.google.com/p/selenium/wiki/PageObjects
  23. *
  24. */
  25. public class ApiDemosListViewScreenByAllPossible {
  26.  
  27. /**
  28. * Page Object best practice is to describe interactions with target
  29. * elements by methods. This methods describe business logic of the page/screen.
  30. * Here lazy instantiated elements are public.
  31. * It was done so just for obviousness
  32. */
  33.  
  34. @AndroidFindAll({
  35. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"),
  36. @AndroidFindBy(id = "android:id/Faketext1"),
  37. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //by this locator element is found
  38. @AndroidFindBy(id = "android:id/FakeId")
  39. }) //If here is a list then it will be filled by all elements
  40. //which are found using all declared locators
  41. public List<MobileElement> findAllElementViews;//若这里是一个列表,那么列表由全部定位方法指定的全部元素组成。
  42.  
  43. @AndroidFindAll({
  44. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"),
  45. @AndroidFindBy(id = "android:id/Faketext1"),
  46. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //by this locator element is found
  47. @AndroidFindBy(id = "android:id/FakeId")
  48. }) //If here is a single element then it will find the first
  49. //element that is found by any of declared locators
  50. public AndroidElement findAllElementView;//如果这里不是列表,那么变量值都将是第一个被发现的元素无论是使用哪种定位方法。
    }

AndroidPageObjectTest_ByAllPossible.java的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. npm-debug.log文件出现原因

    项目主目录下总是会出现这个文件,而且不止一个,原因是npm i 的时候,如果报错,就会增加一个此文件来显示报错信息,npm install的时候则不会出现.

  2. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

  3. 初级Springboot(一)

    初级Springboot(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 一.了解Springboot 做Java开发的小伙伴都知道,我们在做项目的时候,需要去写大量的配置文件 ...

  4. HDU 3605 Escape 最大流+状压

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 2000/1000 MS (Java/Others)    ...

  5. U-boot for Tiny4412

    我的开发板型号: Tiny4412ADK + S700 4GB Flash 1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-201 ...

  6. android中如何发送一个广播

    1.首先要声明广播 private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public  ...

  7. Linq查询满足条件记录集

    通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...

  8. 初涉IPC,了解AIDL的工作原理及用法

    初涉IPC,了解AIDL的工作原理及用法 今天来讲讲AIDL.这个神奇的AIDL,也是近期在学习的,看了某课大神的解说写下的blog,希望结合自己的看法给各位同价通俗易懂的解说 官方文档:http:/ ...

  9. hdu1034 简单模拟

    这里开一个二维数组.num[105][2];   我也不知道N有多少,随便开的,  那么这里num[i][0] 表示当前 第 i 个人拥有的糖果数,num[i][1]表示他上面一个人分给他的糖果数.详 ...

  10. Odoo超售订单

    当 交付给客户的货物多于订购的数量时,就形成'超售'状态: 对于超售的部分,需要进行开票处理,以及根据情况修改交货     发生超售的前提是,产品开票策略为 '按订购数量开票'     同时需要 允许 ...