一、正则表达式元字符:
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)
  • 例如:
  1. //UiAutomator
  2. public void testDemo1() throws UiObjectNotFoundException{
  3. //文本
  4. //正则完全匹配
  5. UiObject object=new UiObject(new UiSelector().textMatches("电影工作室"));
  6. object.clickAndWaitForNewWindow();
  7. UiDevice.getInstance().pressBack();
  8. //正则匹配1
  9. UiObject object1=new UiObject(new UiSelector().textMatches("电影.*"));
  10. object1.clickAndWaitForNewWindow();
  11. UiDevice.getInstance().pressBack();
  12. //正则匹配2
  13. UiObject object2=new UiObject(new UiSelector().textMatches(".*工作室"));
  14. object2.clickAndWaitForNewWindow();
  15. UiDevice.getInstance().pressBack();
  16. //正则匹配3
  17. UiObject object3=new UiObject(new UiSelector().textMatches(".*工作.*"));
  18. object3.clickAndWaitForNewWindow();
  19. UiDevice.getInstance().pressBack();
  20. //类名正则匹配
  21. UiObject object4=new UiObject(new UiSelector().classNameMatches(".*TextView").index(3));
  22. object4.clickAndWaitForNewWindow();
  23. UiDevice.getInstance().pressBack();
  24. //描述正则匹配
  25. UiObject object5=new UiObject(new UiSelector().descriptionMatches(".*部件"));
  26. UiObject object6=new UiObject(new UiSelector().descriptionMatches("应.*"));
  27. object5.clickAndWaitForNewWindow();
  28. object6.clickAndWaitForNewWindow();
  29. //资源ID正则匹配
  30. UiObject object7=new UiObject(new UiSelector().resourceIdMatches(".*analog_appwidget"));
  31. object7.clickAndWaitForNewWindow();
  32. UiDevice.getInstance().pressBack();
  33. }
  1. //JAVA
  2. public static void main(String[] args){
  3. //匹配
  4. String s="789655dsa456kdsaaa951afd";
  5. System.out.println(s.matches(".*aaa.*"));
  6. //替换 a--b
  7. String r=s.replaceAll("a", "b");
  8. System.out.println(r);
  9.  
  10. String q=s.replaceAll("\\d", "b");
  11. System.out.println(q);
  12.  
  13. String a=s.replaceAll("\\w", "b");
  14. System.out.println(a);
  15. //提取
  16. Pattern rp=Pattern.compile("\\d+");
  17. Matcher m=rp.matcher(s);
  18. while (m.find()){
  19. System.out.println(m.group());
  20. }
  21. //分割
  22. String [] sp=s.split("\\d+");
  23. for(int i=0;i<sp.length;i++){
  24. System.out.println(sp[i]);
  25. }
  26. }
四、正则表达式实例:
  1. //实例一:初始化界面
  2. public void testDemo1() throws UiObjectNotFoundException{
  3. UiDevice.getInstance().pressBack();
  4. UiDevice.getInstance().pressBack();
  5. UiDevice.getInstance().pressHome();
  6. //兼容多语言
  7. //点击联系人
  8. UiObject persion=new UiObject(new UiSelector().textMatches("联系人|People"));//中文或英文
  9. persion.clickAndWaitForNewWindow();
  10. //点击添加
  11. UiObject add=new UiObject(new UiSelector().descriptionMatches("添加联系人|Add\\sContact"));
  12. add.clickAndWaitForNewWindow();
  13. //获取姓名和输入框和完成按钮
  14. UiObject name=new UiObject(new UiSelector().classNameMatches(".*EditText").text("姓名|Name"));
  15. UiObject phone=new UiObject(new UiSelector().classNameMatches(".*EditText").text("电话|Phone"));
  16. UiObject done=new UiObject(new UiSelector().text("完成|Done"));
  17. //输入姓名电话后点击完成
  18. String nameStr="Jian"+new Random().nextInt(100);
  19. name.setText(nameStr);
  20. phone.setText("123456789");
  21. done.clickAndWaitForNewWindow();
  22. //判断创建是否成功
  23. assertTrue(new UiObject(new UiSelector().textMatches(nameStr)).exists());
  24. }
  1. //实例二:
  2. public void testDemo2() throws UiObjectNotFoundException{
  3. //同种类型的对话框按钮
  4. clickDialog(false);
  5. }
  6. public void clickDialog(boolean yn) throws UiObjectNotFoundException{
  7. UiObject y=new UiObject(new UiSelector().textMatches("是|确认|确定|Y|OK"));
  8. UiObject n=new UiObject(new UiSelector().textMatches("否|同意|取消|N|Cancel"));
  9. if(yn){
  10. try {
  11. y.click();
  12. } catch (UiObjectNotFoundException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. }else{
  17. n.click();
  18. }
  19. }

9.Android UiAutomator正则表达式的使用的更多相关文章

  1. Appium python自动化测试系列之Android UIAutomator终极定位(七)

    android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...

  2. Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)

    简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...

  3. Android uiautomator gradle build system

    This will guide you through the steps to write your first uiautomator test using gradle as it build ...

  4. Android UiAutomator 自动化测试编译运行---新手2

    1.首先打开eclipse创建java项目

  5. Android UiAutomator - CTS Frame

    使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...

  6. Android UiAutomator 快速调试

    背景:在Eclipse中不能直接运行Uiautomator工程,所以每次编写一份用例都要进行手动输入命令,很烦.调试起来不仅繁琐还浪费时间.网上找到一份快速调试的代码UiAutomatorHelper ...

  7. Android UiAutomator

    UiAutomator是一个做UI测试的自动化框架.<Android自动化测试框架>中已有详细介绍,这里就不再累赘了. 一.首先了解自动化测试流程 自动化需求分析 测试用例设计 自动化框架 ...

  8. python+Android+uiautomator的环境

    Python+Android+uiautomator的环境搭建 Python 下载适合系统的版本并安装,安装时勾选把路径加入path 验证:windows下打开cmd输入python 出现以下界面说明 ...

  9. Android uiautomator实例使用

    转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...

随机推荐

  1. Scrum立会报告+燃尽图(十月十五日总第六次):视频上传及选题介绍工作

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2196 Scrum立会master:田良 一.小组介绍 组长:付佳 组员: ...

  2. YQCB冲刺周第三天

    团队讨论照片 今天的任务为实现由用户记录一条数据,向数据库中添加一条数据. 遇到的问题为获取单选框.下拉菜单的参数.

  3. 2018软工实践—Alpha冲刺(6)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...

  4. hdu 5524

    由于是完全二叉树,所以我们可以预先知道整棵树的形状,因此可以判断根节点的两个子节点哪个是满二叉树,哪个不是满二叉树(必然是一边满,一边不满),对于满的子节点,我们可以直接求出它的不同子树的个数,也就是 ...

  5. Objective-C Json转Model(利用Runtime特性)

    封装initWithNSDictionary:方法 该方法接收NSDictionary对象, 返回PersonModel对象. #pragma mark - 使用runtime将JSON转成Model ...

  6. Markdown github 风格语法

    某些效果cnblog无法支持,见 https://github.com/tanghammer/note/blob/master/Markdown%20github%E9%A3%8E%E6%A0%BC% ...

  7. Alpha冲刺阶段集合贴

    第一篇:http://www.cnblogs.com/xss6666/p/8870734.html 第二篇:http://www.cnblogs.com/xss6666/p/8893683.html ...

  8. app测试更多机型系统解决方法

    手头上测试机有限,不可能每个机型每个系统都 有一部手机,此时寻求一个什么都有的测试平台就显得尤为重要了. 作为小白的我刚刚使用了一波腾讯优测,简单粗暴有效给力,而且新注册认证用户还有60min免费使用 ...

  9. MyEclipse+SSH开发环境配置

    MyEclipse+Struts+Hibernate+Mysql开发环境配置 软件: jdk-6u22-windows-x64.exe apache-tomcat-6.0.29.exe mysql-5 ...

  10. JS扫雷原理性代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...