• 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();
        }
    }
  • 相关阅读:
    UVa 128 Software CRC
    UVa 11258 String Partition(简单DP)
    POJ 3070 Fibonacci(矩阵乘法logN)
    UVa 10280 Old Wine Into New Bottles(剪枝+完全背包)
    图论笔记第四章 欧拉图与哈密尔顿图(beta.)考点
    图。。珍藏season
    图论及其应用哈密尔顿图(alpha)
    9.保健…todo
    android 移植笔记有感
    unp_exam_要点.doc
  • 原文地址:https://www.cnblogs.com/JianXu/p/5225187.html
Copyright © 2020-2023  润新知