AndroidPageObjectTest_ByAllPossible.java
以下代码使用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;//如果这里不是列表,那么变量值都将是第一个被发现的元素无论是使用哪种定位方法。
51 }