您的位置:首页 > 移动开发

Appium基础篇7-元素定位之by_android_uiautomator

2017-09-09 23:13 621 查看
这篇开始陆续介绍各种元素定位方式,如果学习过Selenium的朋友,就很清楚Selenium有八种方式支持元素定位。其实在appium也有多中方式支持元素定位,有些定位方法是共有的,有些定位方式只能在Android,有些定位方法只能在iOS上,当然本系列不讨论iOS的任何东西,只关注安卓。

1.看下面这个图, 如何定位



问题描述:

       用UI automator viewer方法,推荐、热点、小说,三个tab都是采用同一个id,所以,这三个元素就不同采用id来定位。之前看过一些相关文档,说text=‘推荐’,这里text相当于selenium中的find_element_by_name,OK,那么我就用by name,结果报错:Locator Strategy 'name' is not supported
for this session。查 阅资料,才发现appium在某一个新版本后就不支 持by name的定位方法,而是by_android_uiautomator方式,具体解决方案参考:https://stackoverflow.com/questions/37487485/selenium-invalid-selector-exception-locator-startegy-name-is-not-supported-f

2.解决办法

import os

import time
from appium import webdriver

apk_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) # 获取当前项目的根路径

desired_caps ={}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '6.0.1' #设备系统版本
desired_caps['deviceName'] = 'KIW-AL10' #设备名称

# 测试apk包的路径
desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'
# 不需要每次都安装apk
desired_caps['noReset'] = True
# 应用程序的包名
desired_caps['appPackage'] = 'com.baidu.searchbox'
desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app
time.sleep(5) #app启动后等待5秒,方便元素加载完成
# 根据元素id来定位
# 点击“热点”频道
#hot = driver.find_element_by_id('com.baidu.searchbox:id/tab_indi_title')
hot = driver.find_element_by_android_uiautomator("text(\"热点\")")
hot.click()
# 点击“推荐”频道
rec = driver.find_element_by_android_uiautomator("text(\"推荐\")")
rec.click()
driver.quit()

测试结果,运行成功,当我们遇到上面那种报错,就换成这种元素定位方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: