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.解决办法

[python]  view plain  copy
  1. import os  
  2.   
  3. import time  
  4. from appium import webdriver  
  5.   
  6. apk_path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))  # 获取当前项目的根路径  
  7.   
  8. desired_caps ={}  
  9. desired_caps['platformName'] = 'Android' #设备系统  
  10. desired_caps['platformVersion'] = '6.0.1' #设备系统版本  
  11. desired_caps['deviceName'] = 'KIW-AL10' #设备名称  
  12.   
  13. # 测试apk包的路径  
  14. desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'  
  15. # 不需要每次都安装apk  
  16. desired_caps['noReset'] = True  
  17. # 应用程序的包名  
  18. desired_caps['appPackage'] = 'com.baidu.searchbox'  
  19. desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'  
  20.   
  21. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app  
  22. time.sleep(5#app启动后等待5秒,方便元素加载完成  
  23. # 根据元素id来定位  
  24. # 点击“热点”频道  
  25. #hot = driver.find_element_by_id('com.baidu.searchbox:id/tab_indi_title')  
  26. hot = driver.find_element_by_android_uiautomator("text(\"热点\")")  
  27. hot.click()  
  28. # 点击“推荐”频道  
  29. rec = driver.find_element_by_android_uiautomator("text(\"推荐\")")  
  30. rec.click()  
  31. driver.quit()  
测试结果,运行成功,当我们遇到上面那种报错,就换成这种元素定位方式。

猜你喜欢

转载自blog.csdn.net/qq_24857309/article/details/79664346