Uiautomator 2.0 - Until

 

 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);
    }
}

  

posted @ 2017-01-12 14:35  ZSR0401  阅读(1082)  评论(0编辑  收藏  举报