今天跟大家分享下Appium的元素定位的一些小技巧。
Appium对于处理原生的android应用直接通过uiautomatorviewer.bat这个 工具 来获取元素定位。
在开始appium元素定位的话题之前,首先让我们了解下appium的一些基础知识:
一、测试对象
appium 是一个自动化测试开源工具,支持iOS和 Android平台上的原生应用,web应用和混合应用。
移动原生应用: 单纯用ios或者android开发语言编写的、针对具体某类移动设备、可直接被安装到设备里的应用,一般可通过应用商店获取;
移动web应用: 使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome),不需要下载到设备上,而是通过浏览器直接访问;
混合应用: 同时使用网页语言与程序语言开发,通过应用商店区分移动操作系统分发,用户需要安装使用的移动应用。
二、支持平台及语言
appium是跨平台的,支持OSX,Windows以及 Linux 系统。它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性
appium支持多语言,采用C/S设计模式,只要满足client能够发送http请求给server即可
三、元素定位
1.格式:find_element_by_定位方式(value)
我根据手机自带的计算器来解释
通过id定位
通过工具获取到按钮的 resource-id
driver.find_element_by_id('resource-id')
实例: driver.find_element_by_id(' com.android.bbkcalculator:id/clear')
通过class定位
通过工具获取到按钮的class
driver.find_element_by_class_name('class')
实例: driver.find_element_by_class_name(' android.widget.ImageButton ')
通过text定位
appium1.5及之后的版本废弃了name属性(如name=百度一下,需要使用uiautomator的定位方式,使用text的内容)
driver.find_element_by_android_uiautomator("text(\中文\)")
实例:driver.find_element_by_android_uiautomator ("text(\"百度一下\")")
备注:需要确认这个中文是当前页面唯一值,否则还是定位不到,注意写法,不是直接把中文复制进去
通过xpath定位
driver.find_element_by_xpath("xpath内容 ")
实例:driver.find_element_by_xpath("//android.widget.FrameLayout/android.widget.ImageButton[4]")
以下方式暂时没有用到,如果有问题以后会更改
通过accessibility_id
在UI Automator Viewer界面上并没有找到这个字段,这个对应的字段是content-desc
driver.find_element_by_accessibility_id("accessibility_id")
没有找到实例,要是自己写自动化的APP碰到了,可以用用
通过css_selector定位(webview)
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_css_selector()
通过link_text定位(webview)
只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_link_text()
通过name定位
只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_name()
2.定位元素的另一种写法:find_element(by,value)
find_element_by_方式(value)实际调用的都是find_element(by,value)
需要导入这个包:from selenium.webdriver.common.by import By
例如:定位id为ag2的元素
方式一:driver.find_element_by_id("ag2”)
方式二:driver.find_element(By.ID,"ag2")
这个操作的好处是可以直接把操作的by和value放到一个元组里,然后调用通用方法来传参获得元素结果。
cateid=(By.ID,"ag2")
driver.find_element(*cateid).click()
by的操作可以是:
By.ID 相当于by_id
By.CLASS_NAME 相当于by_class_name
By.XPATH 相当于by_xpath
By.NAME 相当于by_name
By.TAG_NAME 相当于by_tag_name
By.CSS_SELECTOR 相当于by_css_selector
By.LINK_TEXT 相当于by_link_text
3.find_elements_by_定位方式(value)返回元素数组
用法与find_element_by_方式(value)一致,但是返回一个数组。可以通过数组的索引来访问具体的某个结果。
例如:通过class_name定位到多个元素,我想点击第一个元素
driver.find_elements_by_class_name("android.widget.RelativeLayout”)[0].click()
4.返回元素数组的另一种写法:find_elements(by,value)
用法与find_element(by,value)一致,但是返回一个数组。可以通过数组的索引来访问具体的某个结果。
例如:通过class_name定位到多个元素,我想点击第一个元素
driver.find_elements(By.CLASS_NAME,"android.widget.RelativeLayout”)[0].click()
5.通过元素定位元素
可以先找到某个元素,然后再进一步定位元素
find_element_by_class_xpath(“xxx”).find_element_by_name(“yyy")
四、元素操作
找到元素后可以对元素进行的操作,例如上面讲的进一步定位元素
1.click()
//点击操作
也可以用tab实现点击操作
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ae8").click()
2.clear()
//清空输入框内容
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").clear()
3.send(xx)
//输入框内输入内容
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")
4.text
//获得元素的text内容
print(driver.find_element_by_xpath(" //android.widget.LinearLayout[1]//xxx").text)
四、总结
1、Appium跨平台,支持Android和IOS自动化测试。
2、Appium支持多语言,如 java 、Object-C、JavaScript、 Php 、 Python 、 Ruby 、C#、Clojure等等
3、支持原生应用,web应用和混合应用
4、仅仅支持UI测试
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660
以上所述就是小编给大家介绍的《这些appium常用元素定位技巧,你掌握了几种?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- CSS 基础:块级元素、行内元素、替换元素、非替换元素
- CSS 技巧篇(六):display设置元素为行内元素时,元素之间存在间隙问题
- 探究行内元素和块级元素
- 重学前端:块级元素与内联元素
- 使CSS伪元素:在与主元素相同的高度之前
- 求非负元素数组所有元素能组合的最大字符串
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
免费:商业的未来
Chris Anderson / 中信出版集团 / 2015-10-1 / 35.40
《免费》,这是一个商业模式不断被颠覆、被改写的时代。一种商业模式既可以统摄未来市场,也可以挤垮当前市场——在我们这个现代经济社会里,这并不是一件不可能的事情。“免费”就是这样的一种商业模式,它代表了互联网时代的商业未来。 “免费”商业模式是一种建立在以电脑字节为基础上的经济学,而非过去建立在物理原子基础上的经济学。在原子经济中,随着时间的推移,我们周围的物品都在逐渐升值。但是在字节经济的网络......一起来看看 《免费:商业的未来》 这本书的介绍吧!