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只要简单几个指令即可,但他 ...
随机推荐
- shell基础 -- 基本语法
本文介绍一下 shell 的语法. 一.变量 在 shell 里,使用变量之前通常并不需要事先为他们做出声明,需要使用的时候直接创建就行了.默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们 ...
- R-CNN学习总结
R-CNN是一个比较早期的用于目标检测方法,但却十分经典,在此结合论文对这一方法做一个总结. (写给小白:通过下图简单理解图像分类,图像定位,目标检测和实例分割) R-CNN方法提出的背景: 1.近1 ...
- scrapy-redis+selenium+webdriver 部署到linux上
背景:在使用selenium时,在本地使用windows,都会有一个图形界面,但是到了生产环境linux上没有了图形界面怎么部署呢? 解决方案: 1.安装图形化界面,不推荐,因为安装图形化界面会占用很 ...
- pyextend库-unpack列表集合字符串解包函数
pyextend - python extend lib unpack (iterable, count, fill=None) 参数: iterable: 实现 __iter__的可迭代对象, 如 ...
- Scrum立会报告+燃尽图 01
此作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁 ...
- 寒假MOOC学习计划
我选择的是西北工业大学的课程,理由如下: 首先,选择这门课的网友还蛮多的,特意看了一下评价,也不错: 其次,这个课程的排版与我从图书馆借来的一本书内容排版比较符合,可以结合起来一起看,说不定会有更多收 ...
- lintcode-382-三角形计数
382-三角形计数 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形? 样例 例如,给定数组 S = {3,4,6,7},返回 3 其 ...
- AVAudioPlayer播放音乐
1:首先创建一个新的项目,继承自UIViewController 2:导入框架AVFoundation.framework 右键工程名,在Build Phases的Link Binary With L ...
- linux的一些机制Signal, Fork,
signal(SIGCHLD, SignalHandler); 注册软中断,对应的api close(socket); ret=fork(): 父进程,返回子进程的pid. 子进程返回0, 出错返回& ...
- Struts2拦截器配置和使用
拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 说到拦截器interceptor,就会想到过滤器filter: 过滤器f ...