Appium入门学习过程需要大量的实践,这里以一个具体的应用为例,简述一下我在实践过程中的经验:
- 手机:荣耀20 Pro
- 应用:备忘录(华为手机自带)
- 调试方式:实体机无线调试
- 元素定位工具:uiautomatorviewer(安卓sdk自带)
实现的功能非常简单:新增一条待办事项并保存。
1. 代码
# -*-coding:utf-8-*-
from appium import webdriver
server = 'http://localhost:4723/wd/hub'
desired_caps = {
'platformName': 'Android',
'deviceName': 'Honor',
'appPackage': 'com.example.android.notepad',
'appActivity': '.NotePadActivity',
'noReset': True,
'unicodeKeyboard': True,
'resetKeyboard': True
}
driver = webdriver.Remote(server, desired_caps)
# 点击待办
# driver.find_element_by_name('待办').click() #新版appium已经不支持by name定位,换xpath吧
# driver.find_element_by_xpath('//*[@text = "待办"]').click() #没生效,可能是text无法点击,换ImageView
driver.find_element_by_xpath('//*[@resource-id = "androidhwext:id/content" and @text = "待办"]/parent::*/preceding-sibling::*[1]').click()
# 点击添加按钮
driver.find_element_by_id('com.example.android.notepad:id/fab_add').click()
# 输入文本
# driver.find_element_by_id('com.example.android.notepad:id/text_todo').send_keys('test')
driver.find_element_by_id('com.example.android.notepad:id/text_todo').send_keys('测试')
# 保存
driver.find_element_by_id('com.example.android.notepad:id/save_todo').click()
2. 应用界面
3. 经验总结
- 对于实体机调试来说,我更喜欢无线调试,方法请参考博文《adb无线调试手机》
- 从我短暂的使用经验来看,uiautomatorviewer定位元素比Appium Inspector要准一点,所以我主要用uiautomatorviewer。只是有时候uiautomatorviewer会和appium冲突,导致获取设备快照失败,此时关闭appium即可,分析完元素定位后再打开appium跑代码
- send_keys默认无法输入中文,需要在Desired Capabilities加入两个参数,详见博文《Appium中send_keys输入中文》
- 新版appium已经不支持by name定位,建议换xpath定位
- “待办”列表页的这个按钮的元素定位花了不少时间,最后是用XPath Axes(轴)的方式解决了,但是太长了,如果哪位朋友有更好的方法欢迎评论或私信我!
- 为防输入的文字乱码,建议在Python代码头部加上
# -*-coding:utf-8-*-
之类的编码声明
参考