十二、Android UiAutomator正则表达式的使用

一、正则表达式元字符:
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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值