2.UiSelector API 详细介绍

一、UiSelector类介绍

//通过各种属性与节点关系定位组件

简单实例:public void testDemo2() throws UiObjectNotFoundException{UiSelector l= new UiSelector().text("相机");//搜索条件
UiObject object=new UiObject(l);//一句搜索条件找到对象
object.click();//操作对象

 


二、Androiud的布局与组件及组件属性介绍

1.Android常用布局

TablesAre
线性布局linearLayout
表格布局TableLayout
相对布局RelativelLayout
帧布局FrameLayout
网格布局GridLayout
绝对布局AbsoluteLayout

2.Android常用组件

//文本框、编辑框、按钮、单选按钮、复选框、状态开关按钮、拖动条等等

3.Android组件属性介绍

属性值值类型例子
indexint0
instanceint5
classStringandroid.widget.TextView
packageStringcom.jian.test
Content descStringstring
checkablebooleanfalse
cleckedbooleanfalse
clickablebooleantrue
enabledbooleanfalse
focusablebooleanfalse
focusedbooleanfalse
Scrollablebooleanfalse
Long-clickablebooleanfalse
passwordbooleanfalse
selectedbooleanfalse
boundsRect[366,999][708,1197]

三、四种匹配关系的介绍

1.四种匹配关系介绍

完全匹配(默认)

包含匹配(Contains)

正则匹配(Matches)–可以包含完全匹配、包含匹配、起始匹配

起始匹配(StartWith)

2.例子

匹配字符串:0123456789
完全匹配:0123456789
包含匹配:45678
正则匹配:\d{10}
起始匹配:01234

四、节点关系介绍

这里写图片描述

五、对象搜索-文本与描述

1.文本属性定位对象

返回值API说明
UiSelectortext(String text)文本
UiSelectortextContains(String text)文本包含
UiSelectortextMatches(String regex)文本正则
UiSelectortextStartsWith(String text)文本起始匹配
  • 实例:
public void testDemo1() throws UiObjectNotFoundException{//完全匹配:浏览器UiSelector l1= new UiSelector().text("浏览器");UiObject object1=new UiObject(l1);object1.click();//包含匹配:览器UiSelector l2= new UiSelector().textContains("览器");UiObject object2=new UiObject(l2);object2.click();//正则匹配:.*览.*UiSelector l3= new UiSelector().textMatches(".*览.*");UiObject object3=new UiObject(l3);object3.click();//起始匹配:浏览UiSelector l4= new UiSelector().textStartsWith("浏览");UiObject object4=new UiObject(l4);object4.click();    
}

 

2.描述属性定位对象

返回值API说明
UiSelectordescription(String desc)描述
UiSelectordescriptionContains(String desc)描述包含
UiSelectordescriptionMatches(String regex)描述正则
UiSelectordescriptionStartsWith(String desc)描述开始字符匹配
  • 实例:
public void testDesc() throws UiObjectNotFoundException{//完全匹配:应用UiSelector selector=new UiSelector().description("应用");UiObject object=new UiObject(selector);object.click();//包含匹配:UiSelector selector1=new UiSelector().descriptionContains("用");UiObject object1=new UiObject(selector1);object1.click();//正则匹配:UiSelector selector2=new UiSelector().descriptionMatches("应.*");UiObject object2=new UiObject(selector2);object2.click();//起始匹配:UiSelector selector3=new UiSelector().descriptionStartsWith("应");UiObject object3=new UiObject(selector3);object3.click();}

 

六、对象搜索-类名与包名

1.类名属性定位:

返回值API说明
UiSelectorclassName(String className)类名
UiSelectorclassNameMatches(String regex)正则类名
  • 快速书写方式:

 

(1)class.getName(推荐书写方式)
(2)完整类名方式:android.widger.LinearLayout
(3)正则方式
(4)常量方式

  • 例如:
public void testDemo2() throws UiObjectNotFoundException{//完全匹配UiSelector selector =new UiSelector().className("android.view.View").instance(3);//instance(3)表示界面上从上到下第4-1个viewUiObject object=new UiObject(selector);object.click();//正则匹配UiSelector selector =new UiSelector().classNameMatches(".*View").instance(4);//instance(3)表示界面上从上到下第5-1个viewUiObject object=new UiObject(selector);object.click();     //class.getName输入方式UiSelector selector =new UiSelector().className(View.class.getName()).instance(3);//instance(3)表示界面上从上到下第5-1个viewUiObject object=new UiObject(selector);object.click();}

 

2.包名属性定位

返回值API说明
UiSelectorpackageName(String name)包名
UiSelectorpackageNameMatches(String regex)包名正则
  • 例如:
public void testDemo3() throws UiObjectNotFoundException{UiSelector selector =new UiSelector().packageName("com.android.deskclock");UiObject object=new UiObject(selector);object.click();}

 

七、对象搜索-索引与实例

1.索引与实例说明

1)索引index:指在同级中的编号,在兄弟类中的主键的编号
2)实例instance:整个布局文件中的编号,同一个类(比如6.2中的view类)的同级编号

2.索引与实例属性定位对象

返回值API说明
UiSelectorindex(int index)索引
UiSelectorinstance(int instance)实例
  • 例如:
public void testIndex() throws UiObjectNotFoundException{//indexUiSelector selector =new UiSelector().className("android.widget.ImageButton").index(1);UiObject object=new UiObject(selector);object.click();UiDevice.getInstance().pressBack();//instanceUiSelector selector1 =new UiSelector().className("android.widget.ImageButton").instance(2);UiObject object1=new UiObject(selector1);object1.click();}

 

八、对象搜索-特殊属性与节点

1.特殊属性定位对象

返回值API说明
UiSelectorchecked(booleean val)选择属性
UiSelectorclickable(boolean val)可点击属性
UiSelectorenabled(boolean val)enabled属性
UiSelectorfocusable(boolean val)焦点属性
UiSelectorfocused(boolean val)当前焦点属性
UiSelectorlongClickable(boolean val)长按属性
UiSelectorscrollable(boolean val)滚动属性
UiSelectorselected(boolean val)背景选择属性
  • 例如:
public void testDemo4() throws UiObjectNotFoundException{//checkable[开启wifi(界面默认在设置界面的情况下),由于有wifi和蓝牙两个可点击属性,instance定位]UiObject swtitichObj=new UiObject(new UiSelector().checkable(true).instance(0));swtitichObj.click();//checked[关闭了wifi(界面默认在设置界面的情况下)]UiObject swtitichObj=new UiObject(new UiSelector().checked(true).instance(0));swtitichObj.click();//enable[界面默认在无编辑的信息框,buttom为发送按钮]UiObject send=new UiObject(new UiSelector().enabled(false));                System.out.println(send.getClassName());//获取并输出这个属性的类名//focused[在发送消息界面,光标默认停放位置在联系人或信息框]UiObject focusedObj=new UiObject(new UiSelector().focused(true));focusedObj.setText("Jian");//输入字符"Jian"//longClickable[界面默认位置为桌面首页,多条件定位]UiObject longclick=new UiObject(new UiSelector().longClickable(true).index(4));longclick.click();//scrollable[界面默认位置为文件管理器界面]UiScrollable scrollable=new UiScrollable(new UiSelector().scrollable(true));scrollable.scrollForward();//向下滚动一下scrollable.scrollBackward();//向上滚动一下        

}

 

2.节点属性定位对象

返回值API说明
UiSelectorchildSelector(UiSelector selector)从当前类中往下递归找符合条件的子类组件
UiSelectorformPrent(UiSelector selector)从父类往下递归找符合条件的组件
  • 例如:
public void testDemo5() throws UiObjectNotFoundException{//childSelector[界面停留在文件管理界面]例一:UiScrollable scrollable=new UiScrollable(new UiSelector().scrollable(true).childSelector(new UiSelector().text("Android")));scrollable.click();     //childSelector[界面停留在文件管理界面]例二:UiObject focusedObj=new UiObject(new UiSelector().childSelector(new UiSelector().text("Android")));focusedObj.click();//formPrent[界面停留在文件管理界面]先定位父类再定位主类UiObject PrentObj=new UiObject(new UiSelector().resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item").fromParent(new UiSelector().className("android.widget.LinearLayout").index(1)));//先定位父类再定位主类
    PrentObj.click();}

 


九、对象搜索-资源ID(推荐使用)

1.资源ID说明

1)资源ID属性:
每一个组件都会的编号,也就是资源ID
2)对应Android属性:
XML文件下的Android:ID属性

2.资源ID定位对象

返回值API说明
UiSelectorresourceId(String id)资源ID
UiSelectorresourceIdMatches(String regex)资源ID正则
  • 例如:
public void testDemo6() throws UiObjectNotFoundException{//resourceId(String id)//定位不同ID的组件UiObject resoursId=new UiObject(new UiSelector().resourceId("com.cyanogenmod.filemanager:id/ab_filesystem_info"));  resoursId.click();//定位相同ID的组件UiObject resoursId1=new UiObject(new UiSelector().resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item").index(3));//通过增加多个条件来定位(这里使用index)     
    resoursId1.click();//resourceIdMatches(String regex)UiObject resoursId2=new UiObject(new UiSelector().resourceIdMatches(".*/navigation_view_details_item").index(3));       resoursId2.click();
}

 

转载于:https://www.cnblogs.com/JianXu/p/5158396.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] render在什么时候会被触发?

[react] render在什么时候会被触发? 在 React 中,只要执行了 setState 方法,就一定会触发 render 函数执行; 组件的 props 改变了,不一定触发 render 函数的执行,除非 props 的值来自于父组件或者祖先组件…

C++类模板的三种特化类型

From: http://blog.sina.com.cn/s/blog_65d069c601010fb3.html 说起C的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化…

断路器操作机构分合闸线圈电流特征曲线特点

1、特征量描述 高压断路器操作机构线圈电流波形可以反映分合闸电磁铁本身及所控制的锁闩或阀门以及与之相连的开关操动机构、辅助触点在操作过程中的工作情况。操作机构分合闸过程的工作原理相同,其线圈电流波形也类似。以下是典型的特征电流曲线示意图&#xff1a…

LeetCode Regular Expression Matching

原题链接在这里:https://leetcode.com/problems/regular-expression-matching/ 题目: Implement regular expression matching with support for . and *. . Matches any single character. * Matches zero or more of the preceding element.The matchi…

[react] 怎么在JSX里使用自定义属性?

[react] 怎么在JSX里使用自定义属性? data-xxx"aaa"。 dataset取值 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

几种仪表放大器电路总结

一般模拟信号在进入A/D采样前,需要先进行信号调理,模拟信号放大部分需要着重设计。放大电路采用仪表放大器,其能有效抵抗共模干扰且具有很高的输入电阻,有效提高信噪比。 以下总结常用的仪表模拟放大电路设计。 1、单运放仪表放…

SQL 并联更新

UPDATE o SET col2 c.col3 FROM bo1 AS o JOIN bo2 AS c ON c.col3<> WHERE c.col3<> UPDATE o SET split c.datecount FROM Order_Refund_Table AS o JOIN t2 AS c ON o.ordernoc.orderno 转载于:https://www.cnblogs.com/ilookbo/p/4952348.h…

电流传感器技术总结

1、技术原理分类 电流传感器技术根据原理分为四大类&#xff1a; 根据欧姆定律&#xff0c;通过在电路中串联一个小的取样电阻&#xff0c;测量电阻上的电压&#xff0c;反推出电流&#xff1b;根据电磁感应定律&#xff0c;通过电磁感应耦合测量二次侧的电流大小&#xff0c…

LInux 字符设备驱动程序

#include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <asm/uaccess.h> MODULE_LICENSE("GPL");// 设置这个模块的协议为 GPL #define MAJOR_NUM 2918 //主设备号 //声明Read函数 static ssize_t devi…

信号量使用入门

/*演示如何使用semaphore进行互斥访问说明: read1, read2, read3互斥访问, write等三个read读完后才能写&#xff0c;通过信息量进行控制 */#include<windows.h> #include<process.h> #include<iostream>using namespace std;CRITICAL_SECTION cs; // cri…

IEEE1459功率理论计算方法

0、ADC采集5通道电压&#xff08;ABCN地&#xff09;&#xff0c;4通道电流采用每周波1024点同步采样 1、计算各相&#xff08;Ua、Ub、Uc&#xff09;、线电压&#xff08;Uab、Uac、Ubc&#xff09;&#xff0c;相电流&#xff08;Ia、Ib、Ic&#xff09; 2、计算各相电压、…

python webdriver 常用元素操作

1、新建实例 xx_driver os.path.abspath(r"路径") os.environ["webdriver.xx.driver"] xx_driver driver webdriver.xx(xx_driver) 2、id、name、tag、css、link_text、xpath元素定位 driver.find_element_by_id("xxx") driver.find_element_…

[react] React中怎么检验props?

[react] React中怎么检验props&#xff1f; PropTypes 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

HIPS 自定义框架

整理&#xff1a;Baker 2011.8.17 特别感谢zengjian96帮我排版 对关键程序注入运行防护&#xff1a; *.bat *.cmd *.com *.dll *.drv *.exe *.lnk *.ocx *.pif *.scr *.sys 关键文件/程序防护&#xff1a; Cacls.exe cmd.exe command.com cscript.exe csrss.exel debug.exe d…

使用Visio 2000逆向工程将代码转换为UML图表

From: http://www.sudu.cn/info/html/website/20080508/307109.html 摘要&#xff1a;Microsoft Visio 2000 Professional Edition 和 Enterprise Edition 包含通过逆向工程将 Microsoft Visual C、Microsoft Visual Basic 和 Microsoft Visual J 代码转换为统一建模语言 (UM…

POJ1177 Picture 线段树+离散化+扫描线

求最终的覆盖图形周长&#xff0c;写这种代码应该短而精确&#xff0c;差的比较远 /* Problem: 1177 User: 96655 Memory: 348K Time: 32MS Language: C Result: Accepted */ #include<iostream> #include<stdio.h> #include<stdlib.h>…

DA模拟量控制外接600V高压直流源-设计分析

一、STM32 12位AD DA线性度测试 配置STM32 DA为12bit输出&#xff0c;AD为12bit检测&#xff0c;测试AD和DA的线性度与误差。DAC从0到2.49V步进1mV。ErrorDAC 为标准值减去 ADC的测量值。 板子的Vref2.5V&#xff0c;ADC和DAC的极限为2.5V&#xff0c;测试时直接用杜邦线连接…

[react] React的displayName有什么作用?

[react] React的displayName有什么作用&#xff1f; displayName:定义调试时的组件name 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

使用 rose 将 c++代码转换为 uml 类图

From: http://www.cppblog.com/prayer/archive/2009/12/24/103954.html 阅读本文章&#xff0c;你需要对 uml 有简单的了解&#xff0c;懂得以下术语&#xff1a; 类图( class diagram ) 即 c 中的 class 。 聚合( Aggregation ) 即我们c中的引用。表现为 class 头文件中的…

android中的AIDL进程间通信

关于IPC应该不用多介绍了&#xff0c;Android系统中的进程之间不能共享内存&#xff0c;那么如果两个不同的应用程序之间需要通讯怎么办呢&#xff1f;比如公司的一个项目要更新&#xff0c;产品的需求是依附于当前项目开发一个插件&#xff0c;但是呢这个插件功能以及界面比较…