1、关于没有name,没有ID的元素的定位---通用篇
解题思路:
因为没有name,id;其实剩下的选择已不多,要么xpath,要么className。xpath木有好印象(稳定性不高,加之1.0x后需要写全路径,相当崩溃),我决定十分个人色彩的建议使用className。
具体方法:
用className获取所有该类型的元素;
根据元素的位置确定元素的index;
获取目标元素。
示例:
List<WebElement> lis = driver.findElementsByClassName("android.widget.ImageView");//获取ImageView的所有元素
WebEelement targetEle = lis.get(0);//获取列表中第一个元素

进阶:
你可以自己定义一个className的常量,然后封装个方法,提供大家使用:
public List<WebElement> getAllImges(){
List<WebElement> lis = driver.findElementsByClassName(AndroidClassName.IMAGEVIEW);
return lis;
}
使用的时候,就只需要调用此方法就可以了

此方法的好处:通吃的方法,基本可解决定位的问题;能解决多语言(自然语言)的困扰;
缺点:因为系统需要去获取List,就目前来看,运行效率不是很高,那直接是可以用肉眼看的到的速度在跑。。。

2、关于没有name,没有ID的元素的定位---特用篇
因为是特用,所以需要对页面元素做进一步的分析,找出其中的特性。这些特性主要为className,index,以及clickable等属性。
场景1:同一个页面有10个ImageView对象,而我们的目标元素的index为4,而同为ImageView且index为4的页面只有2个。那我们就可以根据这2个条件来组合查询条件,提高效率。
示例:
List<WebElement> lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4)");
基于这个场景可以封装一个方法:
public List<WebElement> getElementsByClassAndIndex(String classname,int index){
List<WebElement> lis =null;
lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+")");
return lis;
}

场景2:同一个页面有10个ImageView对象,而其中index为4的有5个,而这时我们发现我们的目标元素的是clickable的。然后review页面发现,同时满足上述条件的只有2个。那么。。。
示例:
List<WebElement> lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4).clickable(true)");
同样可以封装一个方法:
public List<WebElement> getElementsByClassAndIndexAndClickable(String classname,int index){
List<WebElement> lis =null;
lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+").clickable(true)");
return lis;
}

场景3:在分析页面元素的时候发现,页面相对比较简单,而且其中只有目标元素的index为4.
示例:
driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");
同样得到一个方法
public WebElement getElementByIndex(int index){
return driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");
}

3、关于输入框有默认text,且当你选中时,不会清空的清空的处理。
类似的情况,用element.clear()是没有效果的。那怎么办呢? 不急,appium提供了很多的操作,直击不行,我们就上组合拳。
示例:
public void clear(WebElement el){
el.click(); //选中输入框
driver.sendKeyEvent(123);//将光标移到最后
String txt = el.getText(); //获取字符串长度
for(int i=0;i<txt.length();i++){
driver.sendKeyEvent(67);//一个个的删除。。。。。
}
}

4、关于UiAutomator无法识别的元素
整体思路:不要忘了咱的手机是可以点击的。
获取相对坐标,点击,就这么简单。(不用绝对坐标是保证程序能在不同的分辨率下运行)
下面一起讨论下相对坐标的获取:找一个页面,这个页面上有相关的元素的位置与目标位置类似,或者根据这些元素能获取到目标的大致位置。
上段代码,帮助理解:
public List<Point> getFileMngPoint(){
List<Point> list = new ArrayList<Point>();
WebElement scrol = driver.findElementByClassName(AndroidClassName.HORIZONTALSCROLL);
List<WebElement> imgs = scrol.findElements(By.className(AndroidClassName.IMAGEVIEW));
//以上仅获取类似位置的元素
Point e0 = getCenterPoint(imgs.get(0));
Point e1 = getCenterPoint(imgs.get(1), imgs.get(2));
Point e2 = getCenterPoint(imgs.get(3));
Point e4 = getCenterPoint(imgs.get(2),imgs.get(3));
Point e5 = getCenterPoint(getElementsByClassAndIndexAndClickable(AndroidClassName.IMAGEVIEW, 0).get(4));
//以上获取元素的中心坐标,相关方法是自己写的
list.add(e0);
list.add(e1);
list.add(e2);
list.add(e4);
list.add(e5);

return list;
}

转载于:https://www.cnblogs.com/longronglang/p/6135454.html

appium定位元素java篇【转】相关推荐

  1. appium java 点击坐标_appium定位元素java篇【转】

    1.关于没有name,没有ID的元素的定位---通用篇 解题思路: 因为没有name,id:其实剩下的选择已不多,要么xpath,要么className.xpath木有好印象(稳定性不高,加之1.0x ...

  2. Appium定位元素的几种方法总结

    目录 前言 1. 通过id定位 2. 通过className定位 3. 通过AccessibilityId定位 4. 通过xpath定位 4.1 常规定位 4.2 contains模糊定位 4.3 组 ...

  3. Appium 定位元素

    启动Appium服务器,点击放大镜图标 配置Appium参数 启动会话 进入模拟器界面,此界面显示ID,xpath elementId:不能用定位元素 resource-id:不是唯一 开始定位(1. ...

  4. Appium自动化测试元素定位方式

    appium 定位元素  1.appium服务器工具定位 Start inspector Session 2.打开uiautomatorviewer.bat android-sdk-windows(S ...

  5. seleniumpython定位网页元素方法_Python+Selenium 定位元素

    1.摘取网页上所有邮箱 练习场景:在某一个网页上有些字段是我们感兴趣的,我们希望摘取出来,进行其他操作.但是这些字段可能在一个网页的不同地方.例如,我们需要在关于百度页面-联系我们,摘取全部的邮箱. ...

  6. Appium+python自动化(九)- 定位元素工具(义结金兰的两位异性兄弟)(超详解)...

    简介 环境搭建好了,其他方面的知识也准备的差不多了,那么我们就开始下一步元素定位,元素定位宏哥主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. 此 ...

  7. python+appium判断元素存在_python自动化测试应用--Appium元素篇

    1.1概要 本篇将对和界面元素相关的内容做讲解,比如,查找元素的几种常见方法,还将介绍如何查看app界面上的元素去做定位,最后还将新手经常遇到的问题做个简单的回答. 1.2 查找app界面元素的工具 ...

  8. appium怎么操作物理返回键_这些Appium常用元素定位技巧,你掌握了几种?

    今天跟大家分享下Appium的元素定位的一些小技巧. Appium对于处理原生的android应用直接通过uiautomatorviewer.bat这个工具来获取元素定位. 在开始appium元素定位 ...

  9. appium手机APP自动化定位元素

    目录 1 什么事手机app自动化,作用和特点 2 自动化原理: 3 定位元素 根据ID 根据CLASS NAME 根据ACCESSIBILITY ID Xpath 1 什么事手机app自动化,作用和特 ...

最新文章

  1. 对数变换的三种实现方法
  2. flutter pub get错误pub get failed和Downloading CanvasKit问题
  3. JZOJ 100043. 【NOIP2017提高A组模拟7.13】第K小数
  4. mysql 代码怎么优化_MySQL 性能优化的简略办法
  5. react-router-dom v6.1.1 使用方式
  6. [oracle] 组织架构退格显示 connect by
  7. tkinter如何lable重复显示到同一行中_如何创建包含 CAD 导入和选择的仿真 App
  8. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)
  9. linux 将程序链接到 usr bin,Linux / usr / bin文件在重新启动后消失
  10. java w732_技术联盟W732系统下载
  11. Hyperledger Fabric学习笔记(三)- 启动网络并测试一个Fabcar的demo
  12. python导入自己写的py_卧槽,神操作!一句查询让Python帮忙自己写程序
  13. 【转】关于输出用%lf和%f的问题
  14. java对txt记事本文件的读取与写入
  15. 【附源码】Java计算机毕业设计基于微信小程序停车系统(程序+LW+部署)
  16. 解决 No converter found capable of converting from type [java.lang.String] to type ... 的问题
  17. 关于dpi、dp与sp的基础了解
  18. ToG产品_产品运营方案框架_2019_002
  19. uni-app day02
  20. C语言中求指定位数的水仙花数

热门文章

  1. 太棒了!PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
  2. 计算机原理实验八位算术逻辑运算,8位算术逻辑运算计算机组成原理实验一
  3. 大数据应用项目创新大赛_第二届海南大数据创新应用大赛收官
  4. 深度强化学习-DDPG算法原理和实现
  5. Python 中argparse模块的使用
  6. 如何理解SVM | 支持向量机之我见
  7. Matlab如何实现建立ROS节点并进行实时通讯
  8. JAVA 获取操作系统属性
  9. python三种数据类型_Python零基础入门学习02:Python基本数据类型:数字类型
  10. SpringBoot 上传文件(单个、多个文件)