zoukankan      html  css  js  c++  java
  • Uiautomator 2.0

     Android 测试支持库中的 Until 类,用于循环查找某些元素或者组件条件等。

       有搜索条件,状态条件,事件条件等三种快捷的条件方式。主要使用在如判断一个对象是否出现,判断新页面是否打开,判断滑动列表是否滚动底部,判断组件是否在特定状态等。 

         
    返回类型 状态条件— 状态条件API  
    static UiObject2Condition<Boolean> descContains(java.lang.String substring) 当对象的描述与给定的字符串包含匹配时,返回一个条件
    static UiObject2Condition<Boolean> descEndsWith(java.lang.String substring) 当对象的描述与给定的字符串结尾匹配时,返回一个条件
    static UiObject2Condition<Boolean> descStartsWith(java.lang.String substring) 当对象的描述与给定的字符串起始匹配时,返回一个条件
    static UiObject2Condition<Boolean> descEquals(java.lang.String contentDescription) 当对象的描述与给定的字符串完全匹配时,返回一个条件
    static UiObject2Condition<Boolean> descMatches(java.util.regex.Pattern regex) 当对象的描述与给定的字符串正则匹配时,返回一个条件
    static UiObject2Condition<Boolean> descMatches(java.lang.String regex) 当对象的描述与给定的字符串正则匹配时,返回一个条件
    static UiObject2Condition<Boolean> textContains(java.lang.String substring) 当对象的文本与给定的字符串包含匹配时,返回一个条件
    static UiObject2Condition<Boolean> textNotEquals(java.lang.String text)  当对象的文本与给定的字符串不相等时,返回一个条件
    static UiObject2Condition<Boolean> textEndsWith(java.lang.String substring) 当对象的文本与给定的字符串结尾匹配时,返回一个条件
    static UiObject2Condition<Boolean> textStartsWith(java.lang.String substring) 当对象的文本与给定的字符串起始匹配时,返回一个条件
    static UiObject2Condition<Boolean> textEquals(java.lang.String text) 当对象的文本与给定的字符串完全匹配时,返回一个条件
    static UiObject2Condition<Boolean> textMatches(java.util.regex.Pattern regex) 当对象的文本与给定的字符串正则匹配时,返回一个条件
    static UiObject2Condition<Boolean> textMatches(java.lang.String regex) 当对象的文本与给定的字符串正则匹配时,返回一个条件
    static UiObject2Condition<Boolean> checkable(boolean isCheckable) 依据 Checkable 属性状态返回一个条件
    static UiObject2Condition<Boolean> checked(boolean isChecked) 依据 Checked 属性状态返回一个条件
    static UiObject2Condition<Boolean> clickable(boolean isClickable) 依据 Clickable 属性状态返回一个条件
    static UiObject2Condition<Boolean> enabled(boolean isEnabled) 依据 Enabled 属性状态返回一个条件
    static UiObject2Condition<Boolean> focusable(boolean isFocusable) 依据 Focusable 属性状态返回一个条件
    static UiObject2Condition<Boolean> focused(boolean isFocused) 依据 Focused 属性状态返回一个条件
    static UiObject2Condition<Boolean> longClickable(boolean isLongClickable) 依据 Focused 属性状态返回一个条件
    static UiObject2Condition<Boolean> scrollable(boolean isScrollable) 依据 Scrollable 属性状态返回一个条件
    static UiObject2Condition<Boolean> selected(boolean isSelected) 依据 Selected 属性状态返回一个条件
         
    返回类型 搜索条件— 搜索条件API 说明
    static SearchCondition<UiObject2> findObject(BySelector selector) 至少找到选择器中的一个元素就会返回一个 SearchCondition
    static SearchCondition<List<UiObject2>> findObjects(BySelector selector) 至少找到选择器中的一个元素就会返回一个 SearchCondition列表
    static SearchCondition<Boolean> gone(BySelector selector) 当没有一个元素匹配选择器则返回 SearchCondition
    static SearchCondition<Boolean> hasObject(BySelector selector) 当至少有一个元素匹配选择器则返回 SearchCondition
         
    返回类型 事件条件— 事件条件API 说明
    static EventCondition<Boolean>  newWindow() 当有一个新窗口出现是返回 EventCondition
    static EventCondition<Boolean>  scrollFinished(Direction direction) 当滚动滚动对象,滚动到尽头的时候返回一个EventCondition
         

    @RunWith(AndroidJUnit4.class)
    public class TUntils {
    
    
        UiDevice device;
        Instrumentation instrumentation;
    
    
        public String resIdTitle = "com.android.settings:id/titleSwitch";
        public String resIdWifiPassword = "com.android.settings:id/dialog_wifi_password";
        public String resIdWifiPositive = "com.android.settings:id/dialog_wifi_positive";
        public String textWifiStatus = "已连接";
        public String textWifiPassword = "LCT-2016";
    
        @Before
        public void setUp(){
            instrumentation= InstrumentationRegistry.getInstrumentation();
            device=UiDevice.getInstance(instrumentation);
    
        }
    
        @After
        public void tearDown(){
    
        }
    
        @Test
        public void testConditionStatus() throws IOException{
            /*
            *   1    状态条件-Uiobject2Condtion
            *  1.1  一个UiObject2Condition代表UiObject2满足某个条件的特定状态,主要用于获取到组件释放处于某种状态。
            *  
            * */
    
            device.executeShellCommand("am start com.android.settings/com.banyac.midrive.connectionsettings.activity.WifiActivity");
            UiObject2 uio = device.findObject(By.res(resIdTitle));
            if (uio.isChecked())
                uio.click();
            Assert.assertTrue(uio.wait(Until.checked(false),10000)); // Status Condition
    
    
        }
    
        @Test
        public void testConditionSearch() throws IOException{
            /*
            *   2. 搜索条件 - SearchCondition
            *   2.1 SearchCondition代表满足一定条件的,需要查找的UI元素,主要用于判断是否存在某个组件。
            *
            * */
    
            device.executeShellCommand("am start com.android.settings/com.banyac.midrive.connectionsettings.activity.WifiActivity");
            UiObject2 uio = device.findObject(By.res(resIdTitle));
            if (! uio.isChecked())
                uio.click();
    
            //Assert.assertTrue(device.wait(Until.gone(By.text("banya-guest")),2000));
            Assert.assertTrue(device.wait(Until.hasObject(By.text("banya-guest")),5000));
        }
    
        @Test
        public void testConditionEvent() throws IOException{
            /*
            *   3. 事件条件 - EventCondition
            *   3.1 EventCondition是一种条件,它依赖于一个事件或一系列事件发生,主要用于判断某个事件是否发生了。
            *
            * */
    
            device.executeShellCommand("am start com.android.settings/com.banyac.midrive.connectionsettings.activity.WifiActivity");
            UiObject2 uio = device.findObject(By.res(resIdTitle));
            if (! uio.isChecked())
                uio.click();
    
            final UiObject2 scrollList = device.findObject(By.clazz("android.widget.ScrollView"));
            Boolean result = device.performActionAndWait(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 10; i++) {
                        scrollList.scroll(Direction.DOWN, 0.5f);
                    }
                }
            }, Until.scrollFinished(Direction.DOWN), 10000);
    
            Assert.assertTrue(result);
        }
    }
    

      

  • 相关阅读:
    [Knowledge-based AI] {ud409} Lesson 8: 08
    [Knowledge-based AI] {ud409} Lesson 7: 07
    [Knowledge-based AI] {ud409} Lesson 6: 06
    [Knowledge-based AI] {ud409} Lesson 5: 05
    [Knowledge-based AI] {ud409} Lesson 4: 04
    [Knowledge-based AI] {ud409} Lesson 3: 03
    [Knowledge-based AI] {ud409} Lesson 2: 02
    [Knowledge-based AI] {ud409} Lesson 1: 01
    [Software Development Process] {ud805} excerpt
    [Machine Learning for Trading] {ud501} Lesson 25: 03-05 Reinforcement learning | Lesson 26: 03-06 Q-Learning | Lesson 27: 03-07 Dyna
  • 原文地址:https://www.cnblogs.com/zsr0401/p/6278157.html
Copyright © 2011-2022 走看看