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

//这个脚本用于演示PageFactory的功能:链式注解@AndroidFindBys、@IOSFindBys。具体用法参考页面类的代码。

  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_Chained {
  37.  
  38. private WebDriver driver;
  39. private ApiDemosListViewScreenChaided 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 ApiDemosListViewScreenChaided();
  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 androidChainSearchElementsTest(){
  70. Assert.assertNotEquals(0, apiDemosPageObject.chainElementViews.size());
  71. }
  72.  
  73. @Test
  74. public void androidChainSearchElementTest(){
  75. Assert.assertNotEquals(null, apiDemosPageObject.chainElementView.getAttribute("text"));
  76. }
  77.  
  78. @Test
  79. public void androidOrIOSFindByElementsTest_ChainSearches(){
  80. Assert.assertNotEquals(0, apiDemosPageObject.chainAndroidOrIOSUIAutomatorViews.size());
  81. }
  82.  
  83. @Test
  84. public void androidOrIOSFindByElementTest_ChainSearches(){
  85. Assert.assertNotEquals(null, apiDemosPageObject.chainAndroidOrIOSUIAutomatorView.getAttribute("text"));
  86. }
  87.  
  88. @Test
  89. public void isAndroidElementTest(){
  90. Assert.assertNotEquals(null, apiDemosPageObject.androidElementView.getAttribute("text"));
  91. }
  92.  
  93. @Test
  94. public void areAndroidElementsTest(){
  95. Assert.assertNotEquals(0, apiDemosPageObject.androidElementViews.size());
  96. }
  97. }

页面类的代码如下:

  1. package com.saucelabs.appium.page_object.android;
  2.  
  3. import io.appium.java_client.android.AndroidElement;
  4.  
  5. import java.util.List;
  6.  
  7. import org.openqa.selenium.WebElement;
  8.  
  9. import io.appium.java_client.pagefactory.AndroidFindBy;
  10. import io.appium.java_client.pagefactory.AndroidFindBys;
  11. import io.appium.java_client.pagefactory.iOSFindBy;
  12. import io.appium.java_client.pagefactory.iOSFindBys;
  13.  
  14. /**
  15. *
  16. * Here is the common sample shows how to use
  17. * {@link AndroidFindBys} annotation to describe the chain of the
  18. * searching for the target element of a native Android app content.
  19. *
  20. * It demonstrates how to declare screen elements using Appium
  21. * page objects facilities.
  22. *
  23. * About Page Object design pattern read here:
  24. * https://code.google.com/p/selenium/wiki/PageObjects
  25. *
  26. */
  27. public class ApiDemosListViewScreenChaided {
  28.  
  29. /**
  30. * Page Object best practice is to describe interactions with target
  31. * elements by methods. This methods describe business logic of the page/screen.
  32. * Here lazy instantiated elements are public.
  33. * It was done so just for obviousness
  34. */
  35.  
  36. @AndroidFindBys({//用多个定位方法描述一组元素。
  37. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //the searching
  38. //starts here
  39. @AndroidFindBy(className = "android.widget.TextView") //this element is nested
  40. //and so on
  41. })
  42. public List<WebElement> chainElementViews;
  43.  
  44. @AndroidFindBys({
  45. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"),
  46. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
  47. @AndroidFindBy(id = "android:id/text1")
  48. })
  49. @iOSFindBys({@iOSFindBy(uiAutomator = ".elements()[0]"),
  50. @iOSFindBy(xpath = "//someElement")})
  51. public List<WebElement> chainAndroidOrIOSUIAutomatorViews;
  52.  
  53. @AndroidFindBys({
  54. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
  55. @AndroidFindBy(className = "android.widget.TextView")
  56. })
  57. public WebElement chainElementView;
  58.  
  59. @AndroidFindBys({
  60. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"),
  61. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
  62. @AndroidFindBy(id = "android:id/text1")
  63. })
  64. @iOSFindBys({@iOSFindBy(uiAutomator = ".elements()[0]"),
  65. @iOSFindBy(xpath = "//someElement")})
  66. public WebElement chainAndroidOrIOSUIAutomatorView;
  67.  
  68. @AndroidFindBys({
  69. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"),
  70. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
  71. @AndroidFindBy(id = "android:id/text1")
  72. })
  73. public AndroidElement androidElementView;
  74.  
  75. @AndroidFindBys({
  76. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"),
  77. @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
  78. @AndroidFindBy(id = "android:id/text1")
  79. })
  80. public List<AndroidElement> androidElementViews;
  81. }

AndroidPageObjectTest_Chained.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. 关于vsftp所遇问题

    问题:使用ftp工具上传文件时提示 553 Could not create file.错误: 严重文件传输错误解决方法:除了检查ftp服务外,需要使用 getsebool -a|grep ftp, ...

  2. Access自定义函数(人民币大写)

    人民币大写函数:整数不超过13位. Public Function 人民币大写(A) As String Dim aa As String Dim bb As String Dim cc As Str ...

  3. 【Todo】Java并发学习 & 示例练习及代码

    接上一篇:http://www.cnblogs.com/charlesblc/p/6097111.html <Java并发学习 & Executor学习 & 异常逃逸 & ...

  4. GDB调试动态链接库

    http://cyukang.com/2012/06/25/gdb-with-libso.html http://cyukang.com/2011/05/06/valgrind.html

  5. Markdown基础以及个人经验

    前言 DFRobot论坛今日支持Markdown发帖了: [md] your content here [/md] 非常棒,再也不怕辛辛苦苦排个版,一夜回到解放前.这里介绍一下Markdown写博客发 ...

  6. python(25)- 面向对象补充Ⅰ

    一.如何使用类 1.实例化:创建对象 类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征. 例子一 x=int(10) print(x) python中一切 ...

  7. CSDN - 进程结束后new出的内存会回收吗?

    http://blog.csdn.net/stanjiang2010/article/details/5386647     关键词:内存回收  

  8. C#文件操作与编程

    一:驱动器System.IO 软盘,优盘,光盘,硬盘 DriveInfo/DriveType DriveInfo:确定有关驱动器的信息:盘符,类型,可用空间 DriveType:确定DriveInfo ...

  9. laravel 配置了自己的域名以后, localhost 无法访问 404 not found 的解决方法

    这是后盾网视频教程的方法,应该是配置虚拟主机,此方法要改动,apache服务器里的conf文件夹里的httpd.conf文件 和conf/extral里面的httpd-vhost文件 具体改动为,co ...

  10. 今日BBC

    1.随身英语 Brain training 怎样训练大脑? link 2.地道英语 In good nick 品质好.没有损坏(主要是指古老的东西,比方古董) link 3.今日新闻 -------- ...