本文主要是介绍Appium基础篇7-元素定位之by_android_uiautomator,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这篇开始陆续介绍各种元素定位方式,如果学习过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 osimport time
from appium import webdriverapk_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()
测试结果,运行成功,当我们遇到上面那种报错,就换成这种元素定位方式。
这篇关于Appium基础篇7-元素定位之by_android_uiautomator的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!