zoukankan      html  css  js  c++  java
  • AndroidPageObjectTest_Chained.java

    以下代码使用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 
    54     @AndroidFindBys({
    55         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/list")"),
    56         @AndroidFindBy(className = "android.widget.TextView")
    57         })
    58     public WebElement chainElementView;
    59 
    60 
    61     @AndroidFindBys({
    62         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/content")"),
    63         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/list")"),
    64         @AndroidFindBy(id = "android:id/text1")
    65         })
    66     @iOSFindBys({@iOSFindBy(uiAutomator = ".elements()[0]"),
    67         @iOSFindBy(xpath = "//someElement")})
    68     public WebElement chainAndroidOrIOSUIAutomatorView;
    69     
    70     @AndroidFindBys({
    71         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/content")"),
    72         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/list")"),
    73         @AndroidFindBy(id = "android:id/text1")
    74         })
    75     public AndroidElement androidElementView;
    76     
    77     @AndroidFindBys({
    78         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/content")"),
    79         @AndroidFindBy(uiAutomator = "new UiSelector().resourceId("android:id/list")"),
    80         @AndroidFindBy(id = "android:id/text1")
    81         })
    82     public List<AndroidElement> androidElementViews;
    83 }
  • 相关阅读:
    WPF TextBox 一些设置技巧
    Rust 初始配置
    Framework​Element.​Find​Name 根据名字查找控件
    C# SQLite 数据库操作
    MP3 信息读取
    C# event 事件学习
    Nginx 整合 Lua 实现动态生成缩略图
    Spring Cloud 入门 之 Config 篇(六)
    Spring Cloud 入门 之 Zuul 篇(五)
    Flyway 简单入门教程
  • 原文地址:https://www.cnblogs.com/superbaby11/p/6146067.html
Copyright © 2011-2022 走看看