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

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. Linux内核学习笔记(7)--完全公平调度(CFS)

    一.完全公平调度算法 完全公平调度 CFS 的出发点基于一个简单的理念:进程调度的效果应该如同系统具备一个理想中的完美多任务处理器.在这种系统中,每个进程能够获得 1/n 的处理器时间(n 为可运行进 ...

  2. eclipse提示找不到dubbo.xsb报错

    需要下载一个dubbo.xsb文件到本地,并在eclipse中配置 下载路径:下载链接 下载方法: a).带开链接 b).点击[Raw]按钮 c). 右键->另存为 在eclipse中配置xsb ...

  3. 电脑提示‘您需要来自Administration的权限才能对此文件夹进行更改’怎么删除文件

    电脑提示'您需要来自Administration的权限才能对此文件夹进行更改'怎么删除文件 应该怎么做 win7系统需要定期删除一些无用的文件,扩大内存空间,但是在删除文件的时候弹出提示"您 ...

  4. eclipse版本信息及操作系统

    一.查看版本信息: 进入到eclipse安装目录下,有一个.eclipseproduct文件,用记事本打开,就可以知道版本了,后面version=的值就是版本 二.是否为32位操作系统: 找到ecli ...

  5. LeetCode 206. Reverse Linked List(C++)

    题目: Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4 ...

  6. 读 《我是一只IT小小鸟》 有感

    在没有上大学之前,我很迷茫自己将来要从事什么行业.有人说,人生的每一个阶段都应该有自己的目标,然而,我上大学之前,甚至大一下学期之前,我对于我今后的从业道路,人生规划,都是迷茫的.高考结束成绩出来后, ...

  7. map的默认排序和自定义排序

    STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N). 一般而言,使用map的时候直接采取map<typen ...

  8. ZOJ 2060 A-Fibonacci Again

    https://vjudge.net/contest/67836#problem/A There are another kind of Fibonacci numbers: F(0) = 7, F( ...

  9. kafka describe 显示结果解释

    > bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my- ...

  10. IPv4编址及子网划分

    在讨论IP编址之前,我们需要讨论一下主机与路由器连入网络的方法.一台主机通常只有一条链路链接到网络:当主机中的IP想发送一个数据报时,它就在链路上发送,主机与物理链路之间的边界叫做接口(interfa ...