作业思路和想法 杭州第一期_appium 实战_20180527

前言

因为上周要去上海,所以请思寒老师替我代课,非常感谢思寒从北京过来(非常感谢)。

看了下这周的留的作业如下 作业链接

作业1
启动雪球,打开个人消息页,切换到后台3s,然后再模拟电话call

作业2
打开最新版本的雪球,进入 交易->基金->蛋卷基金安全开户->输入手机号,把这个过程自动化并把代码和最后一步截图贴到回复里

作业1 思路

启动雪球,打开个人消息页,切换到后台3s,然后再模拟电话call

要完成作业,大概需要完成下面几个步骤

  1. 获取待测应用的appPackageappActivity

  2. 构造正确的DesiredCapabilities

  3. 启动Appium Server,启动IPython客户端调试代码,打开一个编辑器记录调试通过的代码

  4. 模拟电话Call (目前文档看Python还没有实现这个API,下面用shell命令来实现)

1. 获取应用的appPackage和appActivity

手机打开雪球应用
如果是Mac,打开一个终端,Windows的话打开一个Git-Bash或Cmder。不推荐用自带的Cmd.exe, 因为没有我们需要用的grep命令

输入shell命令,下面这个命令会把所有打开应用的package和activity都显示出来。我们只需要看package是com.xueqiu.android的就够了。

$ adb shell dumpsys activity activities | grep -i category.LAUNCHER | grep -o cmp=.*
cmp=com.netease.cloudmusic/.activity.LoadingActivity (has extras) }
cmp=com.netease.cloudmusic/.activity.LoadingActivity}
cmp=com.netease.cloudmusic/.activity.LoadingActivity (has extras) }
cmp=com.xueqiu.android/.view.WelcomeActivityAlias (has extras) }
cmp=com.xueqiu.android/.common.SplashActivity}

记录下appPackage com.xueqiu.android 和 appActivity .view.WelcomeActivityAlias

PS: 暂时我还不知道别的好办法,欢迎拍砖

2. 构造正确的DesiredCapabilities

为了方便起见,这里提供一个精简版的,一个复杂版的配置。个人比较推荐的是精简版的加上newCommandTimeout参数。

精简版

{
    "platformName": "Android",
    "deviceName": "whatever I do not care",
    "appPackage": "com.xueqiu.android",
    "appActivity": ".view.WelcomeActivityAlias"
}

复杂版

{
    "platformName": "Android",
    "deviceName": "whatever I do not care",
    "appPackage": "com.xueqiu.android",
    "appActivity": ".view.WelcomeActivityAlias",
    "newCommandTimeout": 600, # session过期时间10分钟,默认1分钟
    "unicodeKeyboard": True, # 使用Appium输入法,以便支持中文输入
    "resetKeyboard": True, # Session结束后,重置回系统输入法
    "automationName": "UiAutomator2", # 默认uiautomator1,需要Android的版本(猜测是>=4.4,没看到那里有文档写)
    "udid": "3578298f", # 通过adb devices获取,如果只有一个设备的话可以不写
    "noReset": True, # 是否不pm clear掉应用的数据,默认False
}

3. 编写测试、保存代码

电脑上先安装个IPython pip install ipython 静静的等待安装结束。

打开命令行终端,输入ipython

$ ipython
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

再打开一个终端(假设你已经把Appium安装好了),命令行启动Appium

$ appium --relaxed-security --session-override
[Appium] Welcome to Appium v1.8.1
[Appium] Non-default server args:
[Appium]   sessionOverride: true
[Appium]   relaxedSecurityEnabled: true
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

--relaxed-security是为了后面执行shell命令用的。(看了下Appium Desktop没有发现,设置这个的地方,只有命令行启动appium了)
--session-override 允许session覆盖,一般都是开着的,方便调试。

这是一个支持自动补全的交互式Python解释器终端。

将下面的代码,依次输入到这个解释器中

from appium import webdriver
caps = {
    "platformName": "Android",
    "deviceName": "whatever I do not care",
    "appPackage": "com.xueqiu.android",
    "appActivity": ".view.WelcomeActivityAlias",
    "newCommandTimeout": 600, # session过期时间10分钟,默认1分钟
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
driver.implicitly_wait(30) # 设置元素查找时间30s,默认0s
print(driver.session_id) # 查看当前的session id

比如我们现在的SessionId是90cf88e9-cd3b-4caf-bcdc-ea6f13254ecf

打开Appium Desktop这里我们要用到它的Inspector。不要点击Start Server,因为我们已经启动了一个Server,会冲突的。
菜单栏里面的File -> New Session Window

依次点击红框中的按钮,确保刷新出来的SessionId和我们控制台打出来的Id是一样的就好。

Appium有时候会没响应,这个时候,也没什么好办法,只能重启它。我用的是木木模拟器,好像比我手里的锤子手机要稳定那么一点。

接下来就是用Appium Inspector自带的录制功能,把操作代码撸出来。

其他的一些操作,把应用放到后台3s钟就需要查官网的API文档了。
链接 https://appium.io/docs/en/commands/device/app/background-app/

直接照抄官网的例子 driver.background_app(3)

GSM CALL模拟电话

模拟GSM Call怎么做呢。查了下文档。https://appium.io/docs/en/commands/device/network/gsm-call/
惊讶的发现,Python还没有实现,Java也没有实现。

不过没有关系,谷歌了一下。我们看到Shell命令也可以做到模拟打电话

adb shell am start -a android.intent.action.CALL tel:8888888888888

如何通过Appium执行Shell命令呢。一通谷歌之后,我们发现了下面的方法, 注意,文档里提到了appium启动的时候需要增加--relaxed-security参数。

http://appium.readthedocs.io/en/latest/en/writing-running-appium/android/android-shell/

result = driver.execute_script('mobile: shell', {
    'command': "adb shell am start -a android.intent.action.CALL tel:8888888888888",
})

将刚才用到的代码保存起来,就可以当成作业了。至此作业1完成。

作业2

打开最新版本的雪球,进入 交易->基金->蛋卷基金安全开户->输入手机号,把这个过程自动化并把代码和最后一步截图贴到回复里

看了下,作业2跟作业1差不多的步骤,这里我就不重复写了。