AndroidPageObjectTest_Simple.java

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

//这个脚本用于演示PageFactory的功能:使用注解定位元素。

  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.NoSuchElementException;
 11 import java.util.concurrent.TimeUnit;
 12
 13 import org.junit.After;
 14 import org.junit.Assert;
 15 import org.junit.Before;
 16 import org.junit.Test;
 17 import org.openqa.selenium.WebDriver;
 18 import org.openqa.selenium.remote.DesiredCapabilities;
 19 import org.openqa.selenium.support.PageFactory;
 20
 21 import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;//页面类
 22
 23 public class AndroidPageObjectTest_Simple {
 24
 25     private WebDriver driver;
 26     private ApiDemosListViewScreenSimple apiDemosPageObject;
 27
 28     @Before
 29     public void setUp() throws Exception {
 30         //File classpathRoot = new File(System.getProperty("user.dir"));
 31         File appDir = new File("E:/package");
 32         File app = new File(appDir, "ApiDemos-debug.apk");
 33         DesiredCapabilities capabilities = new DesiredCapabilities();
 34         capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
 35         capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
 36         driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 37
 38         apiDemosPageObject = new ApiDemosListViewScreenSimple();
 39         //This time out is set because test can be run on slow Android SDK emulator
 40         PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS),
 41                 apiDemosPageObject);
 42     }
 43
 44     @After
 45     public void tearDown() throws Exception {
 46         driver.quit();
 47     }
 48
 49     @Test
 50     public void findByElementsTest() {
 51         Assert.assertNotEquals(0, apiDemosPageObject.textVieWs.size());
 52     }
 53
 54     @Test
 55     public void findByElementTest() {
 56         Assert.assertNotEquals(null, apiDemosPageObject.textView.getAttribute("text"));
 57     }
 58
 59
 60     @Test
 61     public void androidFindByElementsTest(){
 62         Assert.assertNotEquals(0, apiDemosPageObject.androidTextViews.size());
 63     }
 64
 65     @Test
 66     public void androidFindByElementTest(){
 67         Assert.assertNotEquals(null, apiDemosPageObject.androidTextView.getAttribute("text"));
 68     }
 69
 70     @Test
 71     public void checkThatElementsWereNotFoundByIOSUIAutomator(){
 72         Assert.assertEquals(0, apiDemosPageObject.iosTextViews.size());
 73     }
 74
 75     @Test
 76     public void checkThatElementWasNotFoundByIOSUIAutomator(){
 77         String nsee = null;
 78         try{
 79             apiDemosPageObject.iosTextView.getAttribute("text");
 80         }
 81         catch (Exception e){
 82             nsee =  e.getClass().getName();
 83         }
 84         Assert.assertEquals(nsee,"org.openqa.selenium.NoSuchElementException");
 85     }
 86
 87     @Test
 88     public void androidOrIOSFindByElementsTest(){
 89         Assert.assertNotEquals(0, apiDemosPageObject.androidOriOsTextViews.size());
 90     }
 91
 92     @Test
 93     public void androidOrIOSFindByElementTest(){
 94         Assert.assertNotEquals(null, apiDemosPageObject.androidOriOsTextView.getAttribute("text"));
 95     }
 96
 97     @Test
 98     public void androidFindByUIAutomatorElementsTest(){
 99         Assert.assertNotEquals(0, apiDemosPageObject.androidUIAutomatorViews.size());
100     }
101
102     @Test
103     public void androidFindByUIAutomatorElementTest(){
104         Assert.assertNotEquals(null, apiDemosPageObject.androidUIAutomatorView.getAttribute("text"));
105     }
106
107     @Test
108     public void areMobileElementsTest(){
109         Assert.assertNotEquals(0, apiDemosPageObject.mobileElementViews.size());
110     }
111
112     @Test
113     public void isMobileElementTest(){
114         Assert.assertNotEquals(null, apiDemosPageObject.mobileElementView.getAttribute("text"));
115     }
116
117     @Test
118     public void areMobileElements_FindByTest(){
119         Assert.assertNotEquals(0, apiDemosPageObject.mobiletextVieWs.size());
120     }
121
122     @Test
123     public void isMobileElement_FindByTest(){
124         Assert.assertNotEquals(null, apiDemosPageObject.mobiletextVieW.getAttribute("text"));
125     }
126
127     @Test
128     public void areRemoteElementsTest(){
129         Assert.assertNotEquals(0, apiDemosPageObject.remoteElementViews.size());
130     }
131
132     @Test
133     public void isRemoteElementTest(){
134         Assert.assertNotEquals(null, apiDemosPageObject.remotetextVieW.getAttribute("text"));
135     }
136 }

页面类的代码:

 1 package com.saucelabs.appium.page_object.android;
 2
 3 import io.appium.java_client.MobileElement;
 4 import io.appium.java_client.pagefactory.AndroidFindBy;
 5 import io.appium.java_client.pagefactory.iOSFindBy;
 6
 7 import java.util.List;
 8
 9 import org.openqa.selenium.WebElement;
10 import org.openqa.selenium.remote.RemoteWebElement;
11 import org.openqa.selenium.support.FindBy;
12
13 /**
14  *
15  * Here is the common sample shows how to use
16  * {@link FindBy}, {@link AndroidFindBy} and {@link iOSFindBy}
17  * annotations.
18  *
19  * Also it demonstrates how to declare screen elements using Appium
20  * page objects facilities.
21  *
22  * About Page Object design pattern read here:
23  * https://code.google.com/p/selenium/wiki/PageObjects
24  *
25  */
26 public class ApiDemosListViewScreenSimple {
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
35     //Common Selenium @FindBy annotations are effective
36     //against browser apps and web views. They can be used against native
37     //content. But it is useful to know that By.css, By.link, By.partialLinkText
38     //are invalid at this case.
39     @FindBy(className = "android.widget.TextView")
40     public List<WebElement> textVieWs;
41
42     //@AndroidFindBy annotation is designed to be used for Android native content
43     //description.
44     @AndroidFindBy(className = "android.widget.TextView")
45     public List<WebElement> androidTextViews;
46
47     @iOSFindBy(uiAutomator = ".elements()[0]")
48     public List<WebElement> iosTextViews;
49
50     //if it is necessary to use the same Page Object
51     //in the browser and cross platform mobile app testing
52     //then it is possible to combine different annotations
53     @FindBy(css = "someBrowserCss") //this locator is used when here is browser (desktop or mobile)
54     @iOSFindBy(uiAutomator = ".elements()[0]") //this locator is used when here is iOS native content
55     @AndroidFindBy(className = "android.widget.TextView") //this locator is used when here is Android
56     //native content
57     public List<WebElement> androidOriOsTextViews;
58
59     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
60     public List<WebElement> androidUIAutomatorViews;
61
62     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
63     public List<MobileElement> mobileElementViews; //Also with Appium page object tools it is
64     //possible to declare RemoteWebElement or any MobileElement subclass
65
66     @FindBy(className = "android.widget.TextView")
67     public List<MobileElement> mobiletextVieWs;
68
69     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
70     public List<RemoteWebElement> remoteElementViews;
71
72     @FindBy(id = "android:id/text1")
73     public WebElement textView;
74
75     @AndroidFindBy(className = "android.widget.TextView")
76     public WebElement androidTextView;
77
78     @iOSFindBy(uiAutomator = ".elements()[0]")
79     public WebElement iosTextView;
80
81     @AndroidFindBy(className = "android.widget.TextView")
82     @iOSFindBy(uiAutomator = ".elements()[0]")
83     public WebElement androidOriOsTextView;
84
85     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
86     public WebElement androidUIAutomatorView;
87
88     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
89     public MobileElement mobileElementView;
90
91     @FindBy(className = "android.widget.TextView")
92     public MobileElement mobiletextVieW;
93
94     @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")")
95     public RemoteWebElement remotetextVieW;
96
97 }
时间: 2024-10-25 19:09:04

AndroidPageObjectTest_Simple.java的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

Java自学序言

Java自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激! 学习Java是一件很痛苦的事儿,我自己要想不断的去挑战一下自己,把自己大学所学的Java知识能够巩固起来.不断的去改正自己开发中的不足之处.如何来学习Java?如何来更好的掌握Java开发语言?这些都是我们要不断