转自:http://www.2cto.com/kf/201410/340345.html

AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用。

1. findElementByName

1.1 示例

?
1
2
el = driver.findElementByName("Add note");
assertThat(el.getText(),equalTo("Add note"));

1.2 如何获得Name

安卓设备没有找到适合的方法,尝试用Appium Inspector,但是使用了当前最新的“AppiumForWindows-1.2.3.1”没有看到这个属性,且Inspector在Windows下面非常的不稳定,很容易crash。真心期望Appium团队尽快解决这个问题

iOS设备倒可以用Appium Inspector获得(以下图片来自网上)

1.3 建议

个人建议可以尝试先用view显示的文本作为name看是否能拿到该控件,按照我个人的经验一般都是会成功的,所以我很怀疑安卓上面控件的name是否就等于text。如果确实还是不行的话就只好放弃用name了。或者等待Appium后来的稳定的inspector发布后看是否可以获得控件的name。<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1eK49re9t6jU2kFwcGl1bTEuMNauuvPG5Mq10tG+rbn9yrG2+NKqsbtmaW5kRWxlbWVudEJ5QWNjZXNzaWJpbGl0eUlkyKG0+rXDwcujrLK71qq1wM6qyrLDtLu5xNy199PDo6yyws/rysdBcHBpdW3NxbbTz+uxo8H00ru2qLXEvObI3dDU0tTGvbusuf22yLDJoaPH67Lpv7Sjumh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvbWlncmF0aW5nLXRvLTEtMC5tZDwvcD4KPGgxPjIuIGZpbmRFbGVtZW50QnlBbmRyb2lkVUlBdXRvbWF0b3I8L2gxPgo8aDI+Mi4xIMq+wP08L2gyPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;"> el = driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Add note\")"); assertThat(el.getText(),equalTo("Add note"));

2.2 如何获得UIAutomator参数

UIAutomator获取控件的方式多种多样,都是通过UiSelector对象来去查找,比如使用view的text文本去当前窗口查找控件,这里不做累述,往后会另起一篇文章来描述UIAUtomator获取控件的方式,到时直接套用进来就可以了。

3. findElementByClassName

3.1 示例

?
1
2
el = driver.findElementByClassName("android.widget.TextView");
assertThat(el.getText(),equalTo("Add note"));

3.2 如何获得控件的ClassName

可以使用UIAutomatorViewer工具直接查看

3.3 建议

使用ClassName一般获得的view都不止一个,所以应该需要遍历一遍得到的views,然后缩写搜索条件来获得目标控件。示例中因为只有一个textview控件在窗口上面,所以不需要遍历。

4. findElementById

4.1 示例

?
1
2
el = driver.findElementById("android:id/title");
assertThat(el.getText(),equalTo("Add note"));

4.2 如何获得Resource Id

可以通过UIAutomatorViewer获得

4.3 建议

如果目标设备的API Level低于18则UIAutomatorViewer不能获得对应的Resource ID,只有等于大于18的时候才能使用。

5. findElementByAccessibilityId

5.1 示例

?
1
2
el = driver.findElementByAccessibilityId("menu_add_note_description");
assertThat(el.getText(),equalTo("node"));

5.2 如何获得AccessibilityId

可以通过UIAutomatorViewer或者Appium Inspector获得

5.3 注释

Accessibility ID在Android上面就等同于contentDescription,这个属性是方便一些生理功能有缺陷的人使用应用程序的。比如我们有一个ImageView里面放置一张颜色复杂的图片,可能一些色弱色盲的人,分不清这张图片中画的是什么东西。如果用户安装了辅助浏览工具比如TalkBack,TalkBack就会大声朗读出用户目前正在浏览的内容。TextView控件TalkBack可以直接读出里面的内容,但是ImageView TalkBack就只能去读contentDescription的值,告诉用户这个图片到底是什么。
鉴于这是一个隐藏属性,而Android上用于查找控件的各种属性可能有所缺失或者有重复(比如id重复,比如一个list下面的所有项可能都是叫做“id/text1”),所以最佳的办法就是跟开发团队沟通好每个view都赋予一个唯一的contentDescription。

6. findElementByCssSelector

TBD, 这个方法应该是针对WebView容器下面的控件定位的,因为现在针对的是Native App暂时还没有用到,所以先标记下,今后需要的时候加上去。

7. findElementByLinkText

TBD, 这个方法应该是针对WebView容器下面的控件定位的,因为现在这很对的是Native App暂时还没有用到,所以先标记下,今后需要的时候加上去。

8. findElementByPartialLinkText

TBD, 这个方法应该是针对WebView容器下面的控件定位的,因为现在这很对的是Native App暂时还没有用到,所以先标记下,今后需要的时候加上去。

9.findElementByTagName

这个方法Appium1.0以后已经过时并被以上的findElementByClassName取代了,请查看https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md

10.findEelementByXPath

10.1 示例

?
1
2
3
el = driver.findElementByXPath("//android.widget.TextView[contains(@text,'Add note')]");
//el = driver.findElement(By.xpath("//android.widget.TextView"));
assertThat(el.getText(),equalTo("Add note"));

10.2 XPath格式变化

从老版本的Appium0.18.x升级到现在的Appium1.x后,注意class name和xpath策略的变化:你现在需要使用FQCN来描述你的控件。也就是说原来的:

findElementByXpath(""//TextView[contains(@text,'Add note')]"")

需要改成

findElementByXpath("//android.widget.TextView[contains(@text,'Add note')]")

详细变动请查看《Appium0.18.x迁移到Appium1.x须知事项》

10.3参考

据说不是很稳定:https://github.com/appium/appium/issues/3371 bootstraponline commented on 13 Aug

sometimes uiautomator fails to create the dump.xml. A client side retry may help. I don't think there's much we can do about the problem until Google fixes uiautomator.

11. 终极方法:AppiumDriver getPageSource

最后介绍AppiumDriver的getPageSource函数,可以把当前页面的元素以XML的方式打印出来,建议大家在找不到view的相应属性的时候就调用该函数来慢慢查找了^_^

转载于:https://www.cnblogs.com/melody-emma/p/4682189.html

appium 控件定位相关推荐

  1. Appium基于安卓的各种FindElement的控件定位方法实践和建议

    AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用. 1. findElementByName 1.1 示例 [java]  view pl ...

  2. app自动化测试——app自动化控制、常见控件定位方法

    文章目录 一.app自动化控制 1.清理数据: 2.启动: 3.关闭: 二.常见控件定位方法 1.android知识 2.ios 基础知识 3.元素定位 4.控件基础知识 5.app dom 结构解析 ...

  3. App控件定位:Android 控件介绍及元素定位方法

    本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...

  4. 03-03 APP 控件定位

    Android 基础知识 Android 是通过容器的布局属性来管理子控件的位置关系 布局过程就是把界面上的所有控件,根据其间距的大小,摆放在正确位置 Android 的七大布局 LineLayout ...

  5. Selenium(二)_控件定位及简单操作

    以百度页面为例: 定位控件的方法 1.通过id来定位(唯一 ,不能定位到多个) driver.find_element_by_id('kw').send_keys('药家鑫') driver.find ...

  6. 安卓学习 之 UI控件(三)

    一.常用控件 1.TextView(文本) match_parent:控件与父类相同(基本不用fil_parent)wrap_content:刚好包裹里面内容. android:gravity调节文字 ...

  7. 在RelativeLayout中对控件的显示隐藏操作问题

    2019独角兽企业重金招聘Python工程师标准>>> 通常我们通过java代码控制布局中,某个控件的显示与隐藏会用: progressBar_video_format.setVis ...

  8. Android UI控件和布局

    说明: 本文是郭霖<第一行代码-第3版>的读书笔记 4.1 如何编写程序界面 编写XML,这是传统的方法 ConstraintLayout,Google推出的新方法,可以在可视化编辑器中拖 ...

  9. WebBrowser控件[Windows窗体]之介绍篇

    Windows 窗体控件 WebBrowser 可承载网页,并为应用程序提供 Web 浏览功能. 使用 WebBrowser 控件,可以复制应用程序中的 Internet Explorer Web 浏 ...

最新文章

  1. 编辑模式下,控制对象移动
  2. python中int表示的数据类型是_python中的基本数据类型之 int bool str
  3. Vue:echarts画图实战,异步获取数据在Vue上使用echarts进行画图
  4. com:向对象到面向服务
  5. mac安装完python怎么打开-MAC中怎么安装python
  6. SAP- MM 委外加工(Subconctracting)流程
  7. YoloV5的原理与实现-开源TensorFlow版
  8. 数学狂想曲(七)——莱洛三角形
  9. Hadoop常见问题 | Hadoop能干什么?
  10. CSS3动画 - title下划线的拉伸效果
  11. Spring AOP AspectJ 代码实例
  12. DEVC中的for编译出错问题解决办法
  13. Linux学习教程,Linux入门教程(超详细)
  14. 手机资料误删恢复有什么办法
  15. usaco3.4.3 Raucous Rockers
  16. ARM裸机篇(三)——i.MX6ULL第一个裸机程序
  17. 100个python算法超详细讲解:农夫过河
  18. 8、实战项目-性能优化实战
  19. android手机如何设置提高网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】...
  20. #ifndef #defin #endif的用法

热门文章

  1. kotlin重写构造方法编译报错:Primary constructor call expected
  2. 学生上课睡觉班主任怎么处理_学生上课睡觉,老师的管与不管,不是你看到的那么简单...
  3. C++ 笔记(36)— 接收输入字符串的几种方法
  4. 2022-2028年中国中空玻璃聚硫密封胶行业市场研究及前瞻分析报告
  5. 机房收费系统总结【1】-整体流程
  6. 数据类型对应的字节数
  7. LeetCode简单题之反转单词前缀
  8. 科技公司合作伙伴清单
  9. Python数据挖掘:数据转换-数据规范化
  10. xlrd.biffh.XLRDError:不支持的格式或文件损坏:预期的BOF记录;找到了b’b \ x14#e \ xbc \