appium 支持 Android 手机端执行adb 命令, 比如测试登录,如果手机端已经为登录状态,在操作登录之前需要先将用户信息清空。这种操作可以通过两种方式来实现.
- 在启动配置中,设置 fullReset:true,
- 执行shell命令,adb shell pm clear pageckage.
下面主要说明如何通过执行命令来实现这个功能
启动 appium 添加 enable adb_shell选项
使用如下命令启动 appium
$ appium --allow-insecure=adb_shell
更多启动参数可以参考 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/server-args.md
自动化脚本
"""
获取Toast 元素
"""
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5" # 设备的版本号 输入自己的设备版本号
caps["deviceName"] = "127.0.0.1:21503" # 设备的序列号 输入自己的设备序列号
caps["automationName"] = "UiAutomator2"
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps) # 连接appium 远程服务
# 全局等待时间30秒 如果元素没有立即显示出来,会重试
driver.implicitly_wait(30)
command = {"command": "pm", "args": "clear org.cnodejs.android.md"}
# 执行清空app data 命令
driver.execute_script('mobile:shell',command)
driver.start_activity('org.cnodejs.android.md','.ui.activity.LaunchActivity')
token = "66068e04-0488-4594-a161-751ffe3a9b7f"
driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton').click()
driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/layout_info"]/android.widget.ImageView').click()
driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/edt_access_token"]').send_keys(token)
driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/btn_login"]').click()
ele = driver.find_element_by_xpath('//*[@class="android.widget.Toast"]')
print(ele.text)
关键代码
command = {"command": "pm", "args": "clear org.cnodejs.android.md"}
# 执行清空app data 命令
driver.execute_script('mobile:shell',command)
更多command命令可以参考:
http://appium.io/docs/en/commands/mobile-command/