您的位置:首页 > 产品设计 > UI/UE

9.Android UiAutomator正则表达式的使用

2016-02-28 17:34 411 查看
一、正则表达式元字符:
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中的任意一个字符
2.表示次数的元字符:

元字符

描述

*重复零次或更多次。例如: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
3.正则表达式中文字符匹配:


正则表达式也支持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_-])+
2.场景字符串匹配:

文件大小 数字 单位 数字
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: