经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
appium---uiautomator定位方法 - 测试-安静
来源:cnblogs  作者:测试-安静  时间:2019/10/9 8:39:15  对本文有异议

  前面总结了7种定位方法,今天在介绍一种uiautomator方法,其实appium就是基于uiautomator框架实现的,让我们一起看下uiautomator有哪些定位方法可以使用

uiautomator是什么

UIAutomator是android的自动化测试框架,也是Android-Sdk中一个查看页面组件元素工具

uiautomator定位方法

前面介绍了常规的定位方法,这里uiautomator又提供了3种常用的定位方法,这次我们主要通过uiautomator方法进行介绍,定位的话依旧拿淘宝来做实战

通过Text方法

1、text(“text文本”)

  1. text = 'text("注册/登录")'
  2. driver.find_element_by_android_uiautomator(text).click()

2、文本比较长,可以使用textContains模糊查询定位 textContains('text文本')

  1. text1 = 'textContains("请输入手机号码")'
  2. driver.find_element_by_android_uiautomator(text1).send_keys("123456")

3、textStartsWith("以text文本开头")

  1. text2 = 'textStartsWith("请输入验证码")'
  2. driver.find_element_by_android_uiautomator(text2).send_keys("12234")

运行结果:

由于用的是模拟器可能有点卡顿。抱歉哈

代码结果:

  1. from appium import webdriver
  2. import time
  3. desired_caps = {
  4. 'platformName': 'Android', # 测试版本
  5. 'deviceName': 'emulator-5554', # 设备名
  6. 'platformVersion': '5.1.1', # 系统版本
  7. "appPackage": "com.taobao.taobao", # app包名
  8. "appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
  9. "noReset": True, # 不清空数据
  10. "unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
  11. "resetKeyboard": True, # 键盘隐藏起来
  12. }
  13. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  14. time.sleep(4)
  15. text = 'text("注册/登录")'
  16. driver.find_element_by_android_uiautomator(text).click()
  17. time.sleep(5)
  18. text1 = 'textContains("请输入手机号码")'
  19. driver.find_element_by_android_uiautomator(text1).send_keys("123456")
  20. time.sleep(5)
  21. text2 = 'textStartsWith("请输入验证码")'
  22. driver.find_element_by_android_uiautomator(text2).send_keys("12234")

Class Name方法

这个方法和appium定位方法一样都是通过Class属性进行定位

  1. # 通过class定位登录按钮
  2. className = 'className("android.widget.Button")'
  3. driver.find_element_by_android_uiautomator(className).click()

通过uiautomator工具找到注册/登录按钮的Class属性

resource-id方法

resourceld 和appium中的id一样。

  1. # 通过resourceId定位输入框
  2. id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
  3. driver.find_element_by_android_uiautomator(id).send_keys("123456")

同意的方法通过uiautomator找到搜索框的id

 id和class定位执行结果:

代码结果:

  1. # coding:utf-8
  2. from appium import webdriver
  3. import time
  4. desired_caps = {
  5. 'platformName': 'Android', # 测试版本
  6. 'deviceName': 'emulator-5554', # 设备名
  7. 'platformVersion': '5.1.1', # 系统版本
  8. "appPackage": "com.taobao.taobao", # app包名
  9. "appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
  10. "noReset": True, # 不清空数据
  11. "unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
  12. "resetKeyboard": True, # 键盘隐藏起来
  13. }
  14. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  15. time.sleep(6)
  16. # 通过class定位登录按钮
  17. className = 'className("android.widget.Button")'
  18. driver.find_element_by_android_uiautomator(className).click()
  19. time.sleep(5)
  20. # 通过resourceId定位输入框
  21. id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
  22. driver.find_element_by_android_uiautomator(id).send_keys("123456")

上面写了一些单独的定位方法,其实uiautomator还支持组合定位元素,意思就是支持id和text或者text和className等,这样的定位更加准确,具体的继续往下看吧

组合定位

1、id和text方法组合

  1. # 通过text+ClassName组合 (resourceId(属性).text(属性))
  2. classText = 'className("android.widget.Button").text("注册/登录")'
  3. driver.find_element_by_android_uiautomator(classText).click()

2、class和text方法组合

  1. # 通过text+ID组合 (resourceId(属性).text(属性))
  2. IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("请输入手机号码")'
  3. driver.find_element_by_android_uiautomator(IdText).send_keys("123456")

执行结果:

  1. # coding:utf-8
  2. from appium import webdriver
  3. import time
  4. desired_caps = {
  5. 'platformName': 'Android', # 测试版本
  6. 'deviceName': 'emulator-5554', # 设备名
  7. 'platformVersion': '5.1.1', # 系统版本
  8. "appPackage": "com.taobao.taobao", # app包名
  9. "appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
  10. "noReset": True, # 不清空数据
  11. "unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
  12. "resetKeyboard": True, # 键盘隐藏起来
  13. }
  14. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  15. time.sleep(6)
  16. classText = 'className("android.widget.Button").text("注册/登录")'
  17. driver.find_element_by_android_uiautomator(classText).click()
  18. time.sleep(5)
  19. # 通过text+ID组合
  20. IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("请输入手机号码")'
  21. driver.find_element_by_android_uiautomator(IdText).send_keys("123456")

父子定位childSelector

 定位的时候我们也可以通过父级找到子级定位

 

 

格式:

  1. # 通过父子定位
  2. (父亲属性).childSelector(定位属性)
  1. # 通过父子定位
  2. fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
  3. driver.find_element_by_android_uiautomator(fuzi).click()

兄弟定位fromParent

定位也可以通过兄弟之间的完成定位

格式:

  1. # 通过兄弟定位
  2. (兄弟属性).fromParent(定位属性)
  1. # 通过兄弟元素定位
  2. xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
  3. driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔裤")

 完成代码:

  1. # coding:utf-8
  2. from appium import webdriver
  3. import time
  4. desired_caps = {
  5. 'platformName': 'Android', # 测试版本
  6. 'deviceName': 'emulator-5554', # 设备名
  7. 'platformVersion': '5.1.1', # 系统版本
  8. "appPackage": "com.taobao.taobao", # app包名
  9. "appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
  10. "noReset": True, # 不清空数据
  11. "unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
  12. "resetKeyboard": True, # 键盘隐藏起来
  13. }
  14. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  15. time.sleep(6)
  16. # 通过父子定位
  17. fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
  18. driver.find_element_by_android_uiautomator(fuzi).click()
  19. time.sleep(6)
  20. # 通过兄弟定位
  21. xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
  22. driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔裤")

结果:

这个地方没有设置appium的键盘所有导致的是乱码的。

 元素定位方面方法非常的多,喜欢那种我们用哪种,哪种简单我们就用那种

 

感觉安静写的对您有帮助的话,可以点歌关注,不迷路,有哪里写错的或者不懂的可以下方留言!

原文链接:http://www.cnblogs.com/qican/p/11544421.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号