appium 支持 Android 手机端执行adb 命令, 比如测试登录,如果手机端已经为登录状态,在操作登录之前需要先将用户信息清空。这种操作可以通过两种方式来实现.

  1. 在启动配置中,设置 fullReset:true,
  2. 执行shell命令,adb shell pm clear pageckage.

下面主要说明如何通过执行命令来实现这个功能

启动 appium 添加 enable adb_shell选项

使用如下命令启动 appium

  1. $ appium --allow-insecure=adb_shell

更多启动参数可以参考 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/server-args.md

自动化脚本

  1. """
  2. 获取Toast 元素
  3. """
  4. from appium import webdriver
  5. caps = {}
  6. caps["platformName"] = "Android"
  7. caps["platformVersion"] = "5" # 设备的版本号 输入自己的设备版本号
  8. caps["deviceName"] = "127.0.0.1:21503" # 设备的序列号 输入自己的设备序列号
  9. caps["automationName"] = "UiAutomator2"
  10. driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps) # 连接appium 远程服务
  11. # 全局等待时间30秒 如果元素没有立即显示出来,会重试
  12. driver.implicitly_wait(30)
  13. command = {"command": "pm", "args": "clear org.cnodejs.android.md"}
  14. # 执行清空app data 命令
  15. driver.execute_script('mobile:shell',command)
  16. driver.start_activity('org.cnodejs.android.md','.ui.activity.LaunchActivity')
  17. token = "66068e04-0488-4594-a161-751ffe3a9b7f"
  18. driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton').click()
  19. driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/layout_info"]/android.widget.ImageView').click()
  20. driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/edt_access_token"]').send_keys(token)
  21. driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/btn_login"]').click()
  22. ele = driver.find_element_by_xpath('//*[@class="android.widget.Toast"]')
  23. print(ele.text)

关键代码

  1. command = {"command": "pm", "args": "clear org.cnodejs.android.md"}
  2. # 执行清空app data 命令
  3. driver.execute_script('mobile:shell',command)

更多command命令可以参考:
http://appium.io/docs/en/commands/mobile-command/

https://github.com/appium/appium/issues/9961