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 | 一个单词的边界 比如说两个两个单词之间的空格就是边界 |
| \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正则表达式的使用的更多相关文章
- Appium python自动化测试系列之Android UIAutomator终极定位(七)
android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...
- Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)
简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...
- Android uiautomator gradle build system
This will guide you through the steps to write your first uiautomator test using gradle as it build ...
- Android UiAutomator 自动化测试编译运行---新手2
1.首先打开eclipse创建java项目
- Android UiAutomator - CTS Frame
使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...
- Android UiAutomator 快速调试
背景:在Eclipse中不能直接运行Uiautomator工程,所以每次编写一份用例都要进行手动输入命令,很烦.调试起来不仅繁琐还浪费时间.网上找到一份快速调试的代码UiAutomatorHelper ...
- Android UiAutomator
UiAutomator是一个做UI测试的自动化框架.<Android自动化测试框架>中已有详细介绍,这里就不再累赘了. 一.首先了解自动化测试流程 自动化需求分析 测试用例设计 自动化框架 ...
- python+Android+uiautomator的环境
Python+Android+uiautomator的环境搭建 Python 下载适合系统的版本并安装,安装时勾选把路径加入path 验证:windows下打开cmd输入python 出现以下界面说明 ...
- Android uiautomator实例使用
转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...
随机推荐
- 袋鼠云研发手记 | 开源·数栈-扩展FlinkSQL实现流与维表的join
作为一家创新驱动的科技公司,袋鼠云每年研发投入达数千万,公司80%员工都是技术人员,袋鼠云产品家族包括企业级一站式数据中台PaaS数栈.交互式数据可视化大屏开发平台Easy[V]等产品也在迅速迭代.在 ...
- [C++基础] 成员变量的初始化顺序
转载链接:https://blog.csdn.net/qq_37059483/article/details/78608375 1.成员变量在使用初始化列表初始化时,只与定义成员变量的顺序有关,与构造 ...
- Altera FPGA AS,PS,Jtag配置模式区别
Altera FPGA AS,PS,Jtag配置模式区别 FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS模式(active seri ...
- 梯度消失&&梯度爆炸
转载自: https://blog.csdn.net/qq_25737169/article/details/78847691 前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案. ...
- 吴恩达 Deep learning 第一周 深度学习概论
知识点 1. Relu(Rectified Liner Uints 整流线性单元)激活函数:max(0,z) 神经网络中常用ReLU激活函数,与机器学习课程里面提到的sigmoid激活函数相比有以下优 ...
- 基于kcp,consul的service mesh实现
名字kmesh 技术:proxy,kcp,consul proxy proxy分为前端和后端 前端代理服务层,包括外部的service 后端实现负债均衡 kcp kcp 基于udp,能够实现快速的传输 ...
- C++ STL 全排列
摘自爱国师哥博客https://www.cnblogs.com/aiguona/p/7304945.html 一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元 ...
- 路由器DMZ功能
环境描述 172.17* 校园网 实验室路由器接入校园网,通过nat分化出网段 192.168.. 实验过程 主机A(windows)接入路由器(192.168.1.110),主机B(Ubuntu)接 ...
- GIT团队实战博客
项目要求 组长博客 遇到的困难及解决办法 组员1(组长):王彬 遇到的困难 在团队任务分工的时候没有充分照顾到所有人,导致队员们的工作量不均. 现场编程时间不够 解决办法 在此对组员们表示抱歉,由于 ...
- GIT团队实战
项目要求 组长博客 遇到的困难及解决办法 组员1(组长):王彬 遇到的困难 在团队任务分工的时候没有充分照顾到所有人,导致队员们的工作量不均. 现场编程时间不够 解决办法 在此对组员们表示抱歉,由于 ...