9.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 一个非单词的边界
[] 匹配方括号内的一个字符。
例如:
[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+ dd:dd
2013-10-24 星期四 d+-d+-d+星期[u4E00-u9FA5] d{4}-d{2}-d{2} 星期[一二三四五六
5:25PM d+:d+[AP]M d?d+:dd[AP]M
下午4:40 .午d:d+ [上下]午d?d:dd
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();
    }
}
原文地址:https://www.cnblogs.com/JianXu/p/5225187.html