9.Android UiAutomator正则表达式的使用
2016-02-28 17:34
411 查看
一、正则表达式元字符:
1.一些常用元字符:
2.表示次数的元字符:
3.正则表达式中文字符匹配:
正则表达式也支持Unicode码,汉字范围可使用Unicode来表示
二、正则表达式匹配示例:
1.普通字符串匹配:
2.场景字符串匹配:
三、正则表达式操作:
1.UiSelector涉及到字符串的搜索条件
文本条件搜索
描述条件搜索
类名条件搜索
资源ID条件搜索
2.Java文本处理操作
匹配字符串
替换字符串
提取字符串
拆分字符串
3.正则表达式相关API:
例如:
四、正则表达式实例:
1.一些常用元字符:
元字符 | 描述 |
. | 表示任意一个字符 |
\s | 空格字符(空格键、tab、换行、换页、回车) |
\S | 非空字符串([^\s]) |
\d | 一个数字(相当于[0-9]中间的任意一个数字) |
\D | 一个非数字的字符(相当于[^0-9]非0-9的任意一个字符) |
\w | 一个单词字符相当于(相当于[a-z,A-Z,0-9]) |
\W | 一个非单词字符[^\w] |
^ | 一行的开始 |
$ | 一行的结尾 |
\b | 一个单词的边界 比如说两个两个单词之间的空格就是边界 |
\B | 一个非单词的边界 |
[] | 匹配方括号内的一个字符。 例如: [abc]表示字符a,b,c,中的任意一个(与a|b|c相同)。 [a-zA-z]表示从a到z或A到Z中的任意一个字符 |
元字符 | 描述 |
* | 重复零次或更多次。例如:a* 匹配零个或者多个a |
+ | 重复一次或更多次。例如:a+匹配一个或者多个a |
? | 重复零次或一次。例如:a?匹配零个或一个a |
{n} | 重复n次。例如:a{4}匹配4个a |
{n,} | 重复n次或更多次。例如:a{4,}匹配至少4个a |
{n,m} | 重复n到m次。例如:a{4,10}匹配4-10个a |
正则表达式也支持Unicode码,汉字范围可使用Unicode来表示
中文字符匹配 | 描述 |
[\u4E00-\u9FA5] | 汉字 |
[\uFE3-\uFFA0] | 全角字符 |
[^\x00-\xff] | 匹配双字节字符(包括汉字在内) |
1.普通字符串匹配:
字符串 | 模糊匹配 | 较精确匹配 |
12:12 | \d+:\d+ | \d\d:\d\d |
2013-10-24 星期四 | \d+-\d+-\d+星期[\u4E00-\u9FA5] | \d{4}-\d{2}-\d{2} 星期[一二三四五六 |
5:25PM | \d+:\d+[AP]M | \d?\d+:\d\d[AP]M |
下午4:40 | .午\d:\d+ | [上下]午\d?\d:\d\d |
Ip地址 | (\d+.)+{3}\d+ | (\d?\d?\d.){3}\d?\d?\d |
邮箱地址 | \w@\w.\w | ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+ |
文件大小 | 数字 | 单位 | 数字 |
1GB | 整数 | GB | 整数或小数 |
1KB | 小数 | MB | \d+ |
500B | 空格 | KB | 单位 |
… | B | [GMK]?B | (\d+|\d+.\d+)\s?[GMK]?B |
1.UiSelector涉及到字符串的搜索条件
文本条件搜索
描述条件搜索
类名条件搜索
资源ID条件搜索
2.Java文本处理操作
匹配字符串
替换字符串
提取字符串
拆分字符串
3.正则表达式相关API:
描述 | UiAutomator API |
正则文本匹配 | textMarches(regex) |
正则描述匹配 | descriptionMarches(regex) |
正则类名匹配 | classNameMarches(regex) |
正则资源ID匹配 | resourceIdMarches(regex) |
描述 | Java API |
匹配字符串 | matcher(regex) |
替换字符串 | replase(regex,input) |
提取字符串 | Matcher.group() |
拆分字符串 | split(regex) |
//UiAutomator public void testDemo1() throws UiObjectNotFoundException{ //文本 //正则完全匹配 UiObject object=new UiObject(new UiSelector().textMatches("电影工作室")); object.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); //正则匹配1 UiObject object1=new UiObject(new UiSelector().textMatches("电影.*")); object1.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); //正则匹配2 UiObject object2=new UiObject(new UiSelector().textMatches(".*工作室")); object2.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); //正则匹配3 UiObject object3=new UiObject(new UiSelector().textMatches(".*工作.*")); object3.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); //类名正则匹配 UiObject object4=new UiObject(new UiSelector().classNameMatches(".*TextView").index(3)); object4.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); //描述正则匹配 UiObject object5=new UiObject(new UiSelector().descriptionMatches(".*部件")); UiObject object6=new UiObject(new UiSelector().descriptionMatches("应.*")); object5.clickAndWaitForNewWindow(); object6.clickAndWaitForNewWindow(); //资源ID正则匹配 UiObject object7=new UiObject(new UiSelector().resourceIdMatches(".*analog_appwidget")); object7.clickAndWaitForNewWindow(); UiDevice.getInstance().pressBack(); }
//JAVA public static void main(String[] args){ //匹配 String s="789655dsa456kdsaaa951afd"; System.out.println(s.matches(".*aaa.*")); //替换 a--b String r=s.replaceAll("a", "b"); System.out.println(r); String q=s.replaceAll("\\d", "b"); System.out.println(q); String a=s.replaceAll("\\w", "b"); System.out.println(a); //提取 Pattern rp=Pattern.compile("\\d+"); Matcher m=rp.matcher(s); while (m.find()){ System.out.println(m.group()); } //分割 String [] sp=s.split("\\d+"); for(int i=0;i<sp.length;i++){ System.out.println(sp[i]); } }
四、正则表达式实例:
//实例一:初始化界面 public void testDemo1() throws UiObjectNotFoundException{ UiDevice.getInstance().pressBack(); UiDevice.getInstance().pressBack(); UiDevice.getInstance().pressHome(); //兼容多语言 //点击联系人 UiObject persion=new UiObject(new UiSelector().textMatches("联系人|People"));//中文或英文 persion.clickAndWaitForNewWindow(); //点击添加 UiObject add=new UiObject(new UiSelector().descriptionMatches("添加联系人|Add\\sContact")); add.clickAndWaitForNewWindow(); //获取姓名和输入框和完成按钮 UiObject name=new UiObject(new UiSelector().classNameMatches(".*EditText").text("姓名|Name")); UiObject phone=new UiObject(new UiSelector().classNameMatches(".*EditText").text("电话|Phone")); UiObject done=new UiObject(new UiSelector().text("完成|Done")); //输入姓名电话后点击完成 String nameStr="Jian"+new Random().nextInt(100); name.setText(nameStr); phone.setText("123456789"); done.clickAndWaitForNewWindow(); //判断创建是否成功 assertTrue(new UiObject(new UiSelector().textMatches(nameStr)).exists()); }
//实例二: public void testDemo2() throws UiObjectNotFoundException{ //同种类型的对话框按钮 clickDialog(false); } public void clickDialog(boolean yn) throws UiObjectNotFoundException{ UiObject y=new UiObject(new UiSelector().textMatches("是|确认|确定|Y|OK")); UiObject n=new UiObject(new UiSelector().textMatches("否|同意|取消|N|Cancel")); if(yn){ try { y.click(); } catch (UiObjectNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ n.click(); } }
相关文章推荐
- RequestContextListener有什么用
- GUI
- 8.Android_UiAutomator 报告查看
- 解决 web 字符编码乱码问题-----charSet 和PageEncoding的区别--request编码问题
- UICollectionView 简单实用
- 334. Increasing Triplet Subsequence
- SOUI入门
- Longest Consecutive Sequence
- UESTC 1131 男神的礼物 dp:最优矩阵链乘&&triangulation&&双dp
- 6.UiWatcher API 详细介绍
- Android系统Bluetooh移植简要说明
- 5.UiScrollable API 详细介绍
- String,StringBuffer与StringBuilder的区别??
- POJ 2313 Sequence#贪心
- IOS UI-瀑布流(UICollectionView)
- Fluently NHibernate映射多个实体程序集
- Fluently NHibernate映射多个实体程序集
- IOS 自动化 2-UI Automation-功能测试
- IOS 自动化 1-UI Automation
- 4.UiCollection API 详细介绍