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只要简单几个指令即可,但他 ...
随机推荐
- 算法笔记(c++)--完全背包问题
算法笔记(c++)--完全背包和多重背包问题 完全背包 完全背包不同于01背包-完全背包里面的东西数量无限 假设现在有5种物品重量为5,4,3,2,1 价值为1,2,3,4,5 背包容量为10 # ...
- Leetcode_2. Add_Two_Number
2. Add_Two_Number 用两个非空链表分别表示两个非负整数,链表的节点表示数字的位,链表头表示数字的低位,链表尾表示数字高位.求两个链表所表示数字的和. 比如: Input: (2 -&g ...
- Binary Tree(生成二叉树)
Description Background Binary trees are a common data structure in computer science. In this problem ...
- 希尔排序(java实现)
上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化.比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都 ...
- psp项目计划
日期/任务 听课 编写程序 阅读书籍 查阅资料 日总计 周一 2h 0.5h 2.5 周二 1h 1 周三 1h 周四 2h 0.5h 2.5 周五 3 ...
- 评价Win8自带输入法
对于人机交互设计,有以下四个基本原则:从用户角度考虑.从头到尾记住用户选择.短期刺激和长期使用的好处坏处.不让用户犯简单错误.我用的最多的是我的系统自带的输入法,评价的也只能是它了. 1.从用户角度: ...
- 软件定义网络(SDN)研究进展
写在前面 这是我入门SDN以来的第一篇论文,它是一篇中文综述,看起来相对容易.也让我对SDN有了进一步的认识.下面是我的一些心得. 全文框架 SDN 将数据平面与控制平面解耦合,简化了网络管理. SD ...
- 【第二周】【作业五】Scrum 每日站会
1.首先来看一下什么是Scrum: Scrum是一种敏捷软件开发的方法学,用于迭代式增量软件开发过程.Scrum在英语是橄榄球运动中争球的意思. 虽然Scrum是为管理软件开发项目而开发的,它同样可以 ...
- 微信小程序 对接口常用
@import '../expert/expert.wxss'; FZ._get('https://didu2.didu86.com/issun/index.php/Home/goodstype/ ...
- mysql流程控制语句
mysql编程 mysql编程中语句块包含符: 其实就是相当于js或php中大括号语法: [标识符:]begin //语句.... end [标识符]: 标识符就是定义定义的任意的名字而已,比如: ...