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只要简单几个指令即可,但他 ...
随机推荐
- Scrum立会报告+燃尽图(十月十五日总第六次):视频上传及选题介绍工作
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2196 Scrum立会master:田良 一.小组介绍 组长:付佳 组员: ...
- YQCB冲刺周第三天
团队讨论照片 今天的任务为实现由用户记录一条数据,向数据库中添加一条数据. 遇到的问题为获取单选框.下拉菜单的参数.
- 2018软工实践—Alpha冲刺(6)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...
- hdu 5524
由于是完全二叉树,所以我们可以预先知道整棵树的形状,因此可以判断根节点的两个子节点哪个是满二叉树,哪个不是满二叉树(必然是一边满,一边不满),对于满的子节点,我们可以直接求出它的不同子树的个数,也就是 ...
- Objective-C Json转Model(利用Runtime特性)
封装initWithNSDictionary:方法 该方法接收NSDictionary对象, 返回PersonModel对象. #pragma mark - 使用runtime将JSON转成Model ...
- Markdown github 风格语法
某些效果cnblog无法支持,见 https://github.com/tanghammer/note/blob/master/Markdown%20github%E9%A3%8E%E6%A0%BC% ...
- Alpha冲刺阶段集合贴
第一篇:http://www.cnblogs.com/xss6666/p/8870734.html 第二篇:http://www.cnblogs.com/xss6666/p/8893683.html ...
- app测试更多机型系统解决方法
手头上测试机有限,不可能每个机型每个系统都 有一部手机,此时寻求一个什么都有的测试平台就显得尤为重要了. 作为小白的我刚刚使用了一波腾讯优测,简单粗暴有效给力,而且新注册认证用户还有60min免费使用 ...
- MyEclipse+SSH开发环境配置
MyEclipse+Struts+Hibernate+Mysql开发环境配置 软件: jdk-6u22-windows-x64.exe apache-tomcat-6.0.29.exe mysql-5 ...
- JS扫雷原理性代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...