博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Appium基于安卓的各种FindElement的控件定位方法实践和建议
阅读量:5332 次
发布时间:2019-06-15

本文共 3479 字,大约阅读时间需要 11 分钟。

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

1. findElementByName

1.1 演示样例

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

1.2 怎样获得Name

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

iOS设备倒能够用Appium Inspector获得(下面图片来自网上)

1.3 建议

个人建议能够尝试先用view显示的文本作为name看能否拿到该控件,依照我个人的经验一般都是会成功的。所以我非常怀疑安卓上面控件的name是否就等于text

假设确实还是不行的话就仅仅好放弃用name了。

或者等待Appium后来的稳定的inspector公布后看能否够获得控件的name。

这种方法在Appium1.0之后事实上已经过时而要被findElementByAccessibilityId代替得了。不知道为什么还能调用,猜想是Appium团队想保留一定的兼容性以平滑过度吧。请查看:

2. findElementByAndroidUIAutomator

2.1 演示样例

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 演示样例

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 演示样例

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 演示样例

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代替了,请查看

10.findEelementByXPath

10.1 演示样例

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')]")

具体变动请查看

10.3參考

据说不是非常稳定:
 commented 

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的对应属性的时候就调用该函数来慢慢查找了^_^
 

作者

自主博客

微信

CSDN

天地会珠海分舵

服务号:TechGoGoGo

扫描码:

转载于:https://www.cnblogs.com/brucemengbm/p/6999435.html

你可能感兴趣的文章
c++开源项目汇总
查看>>
python yield返回多个值
查看>>
每日站立会议及今日份任务
查看>>
R12 付款过程请求-功能和技术信息 (文档 ID 1537521.1)
查看>>
洛谷 4364 [九省联考2018]IIIDX
查看>>
洛谷 3870 [TJOI2009]开关
查看>>
【牛客-16643】统计数字(简单排序)
查看>>
www.aaa.com/index.html跳转www.aaa.com设置
查看>>
ssdb binlog机制 存疑
查看>>
Vue 2.0 组件库总结
查看>>
HDU5033 Building(单调栈)
查看>>
Kafka 安装配置 及 简单实验记录
查看>>
想成为程序猿?28个程序员专供在线学习网站(转)
查看>>
font-style: oblique文字斜体,display:inline-block显示间隙
查看>>
css设置滚动条并显示或隐藏
查看>>
【leetcode❤python】13. Roman to Integer
查看>>
常用关于 JavaScript 中的跨域访问方法
查看>>
织梦万能调用LOOP标签!
查看>>
asp.net MVC helper 和自定义函数@functions小结
查看>>
L1-Day34
查看>>