前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium启动App实践

Appium启动App实践

作者头像
清风穆云
发布2021-08-09 10:51:46
2.3K2
发布2021-08-09 10:51:46
举报
文章被收录于专栏:QA一隅

测试环境

  • Win 10 64bit
  • Python 3.5
  • Appium 1.7.2
  • Andriod 5.1.1 模拟器& Android 5.1 MX4
  • 测试App:考研帮Android版 3.1.0

测试场景

自动安装考研帮App(kaoyan3.1.0.apk),然后启动App

测试步骤

  • 获取待测试app的packageName和Activity
  • 配置Capability
  • 连接设备
  • 编辑脚本并运行
  • 查看结果

运行前检查事项

  1. 检查设备是否连接
  2. 检查Appium server是否启动
  3. 检查Capability配置信息是否正确

测试脚本

test_kyb.py

代码语言:javascript
复制
from appium import webdriver

desired_caps={}
desired_caps['platformName']='Android'

#模拟器设备
desired_caps['platformVersion']='5.1.1'
desired_caps['deviceName']='127.0.0.1:62025'

#mx4真机
# desired_caps['platformVersion']='5.1'
# desired_caps['deviceName']='MX4'
# desired_caps['udid']='750BBKL22GDN'

desired_caps['app']=r'C:\Users\Shuqing\Desktop\kaoyan3.1.0.apk'

desired_caps['appPackage']='com.tal.kaoyan'
desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

pycharm常用快捷键

  • 复制粘贴当前行 Ctrl+D
  • 注释 Ctrl+/
  • 运行当前脚本 Ctrl+shift+F10
  • 折叠展开代码 Ctrl + Numpad + /-
  • 方法定义跳转 Ctrl+B

Tips:

1.首次启动Appium会在设备上安装2个守护app,Appium Settings和Unlock 部分设备系统由于权限的问题(如:三星S6 edge+)需要用户手动确认安装,否则不安装守护App会导致脚本运行失败,安装好后不要随意卸载这两个App。

  • Unlock :用于解锁手机弹窗提示
  • Appium Setting:Appium守护app

2.from appium import webdriver 中的webdriber模块和selenium中的webdriver模块不一样!

webdriver模块源码路径:

代码语言:javascript
复制
{python安装路径}}\Lib\site-packages\appium\webdriver

Appium报错&解决方案

  1. Appium服务未启动
代码语言:javascript
复制
urllib.error.URLError: <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。

【解决方案】点击启动Appium按钮后,出现[Appium] Welcome to Appium v1.7.2提示后再运行脚本

  1. 会话冲突
代码语言:javascript
复制
error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress

【报错分析】 之前的会话没有关闭,然后你又运行了测试实例,也没有设置覆盖.

【解决方案】 重新停止appium服务,开启Appium服务 在AdVance界面勾选Allow Session Override选项 ,重启Appium 测试结束在AfterClass加driver.quit()

  1. 未安装java环境
代码语言:javascript
复制
selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: 'java -version' failed. Error: Command failed: C:\WINDOWS\system32\cmd.exe /s /c "java -version"
  1. 设备未连接
代码语言:javascript
复制
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.

【解决方案】由于设备未连接,或者连接后未开启USB Debug。需要重新连接设备即可。

Tips:

更换手机设备后如下对应的属性要记得更新,否则无法正常运行脚本。

代码语言:javascript
复制
desired_caps['platformVersion'] = 'XXX'
desired_caps['deviceName'] = 'Galaxy S6 edge+'
  1. launchable activity 值错误
代码语言:javascript
复制
Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity

【解决方案】

  • launchable activity 写错更正即可。
  • 如果是存在此activity,则一定是AndroidMainfest.xml.xml中,当前activity设置的属性exported=false,表示当前activity无法被外部程序唤醒。(appium无法唤醒此类)需要研发人员去修改参数。
  1. 系统权限问题
代码语言:javascript
复制
Failure [INSTALL_FAILED_USER_RESTRICTED])

【解决方案】

  1. USB安装管理权限限制,关闭即可。
  2. 开启安装允许未知来源app选项
  3. 服务异常
代码语言:javascript
复制
An unknown server-side error occurred while processing the command” while opening the App

【解决方案】重新启动Appium服务

  1. Oppo设备系统 noReset配置
代码语言:javascript
复制
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'E\:\\Andriod_sdk\\platform-tools\\adb.exe -P 5037 -s 8de1cad4 shell pm clear com.mgtv.data.sdk' exited with code 1'; Stderr: 'Error: java.lang.SecurityException: PID 31008 does not have permission android.permission.CLEAR_APP_USER_DATA to clear data of package com.mgtv.data.sdk'; Code: '1'

解决方案:

  • noRest值设置为True
  1. OPPO 8.X 设备unicodeKeyboard不兼容问题
代码语言:javascript
复制
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'E\:\\Andriod_sdk\\platform-tools\\adb.exe -P 5037 -s 8de1cad4 shell ime enable io.appium.settings/.UnicodeIME' exited with code 4294967177'; Stderr: ''; Code: '4294967177'

解决方案:将unicodeKeyboard参数配置注释掉。oppo系统不兼容,由于appium无法获得UPDATE_APP_OPS_STATS权限,appium原始日志如下:

代码语言:javascript
复制
[AndroidDriver] Unable to set mock location for app 'io.appium.settings': Error executing adbExec. Original error: 'Command 'E\:\\Andriod_sdk\\platform-tools\\adb.exe -P 5037 -s 8de1cad4 shell appops set io.appium.settings android\:mock_location allow' exited with code 4294967295'; Stderr: 'Security exception: uid 2000 does not have android.permission.UPDATE_APP_OPS_STATS.

参考资料

  • https://testerhome.com/topics/14291

更多干货

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试环境
  • 测试场景
  • 测试步骤
    • 运行前检查事项
    • 测试脚本
      • pycharm常用快捷键
      • Appium报错&解决方案
      • 参考资料
      • 更多干货
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档