Windows下配置appium自动化测试环境


写在前面

最近看猪八戒,想接单赚点外快,看了半天没有爬虫需求,看到什么制作算命网站、微信朋友圈采集。ok,来了点兴趣,之前做app爬虫使用的fiddler+xposed,可惜这种方法对于混淆+双向证书校验无效。在搜索过程中看到appium,对应网页端的selenium,本文记录下配置环境的过程。

Android Studio

下载地址
安装教程
注意配置好SDK的安装目录,并且务必记住此目录,等下需要添加虚拟环境

Appium

安装python包
pip install Appium-Python-Client


安装appium-desktop
Github地址
选择exe版本下载安装
如果下载速度过慢请使用手机流量下载,再传文件到电脑
安装过程也没有什么坑,只是会默认安装到C盘


添加虚拟环境:
在系统变量里添加变量名ANDROID_HOME,变量值为Android studio的SDK安装根目录
在系统变量Path里面添加%ANDROID_HOME%\platform-tools,注意与前一个值之间要有分号间隔
添加完成后按Win+R打开cmd,输入adb version验证是否配置成功


其余环境:
Microsoft .NET Framework 4.5
node.js
Java JDK

开始调试

我使用的是MuMu模拟器,adb连接使用如下命令:
adb connect 127.0.0.1:7555
再输入adb devices查看设备
输入adb shell进入shell环境


获取app包名:
csdn
如果已经安装该app,使用adb连接模拟器,然后在模拟器中启动,再在命令行中执行:
adb shell dumpsys window w |findstr \/ |findstr name=

adb shell dumpsys window | findstr mCurrentFocus
不要进入shell环境执行,findstr是windows命令
获取activity
csdn
启动app,执行下列命令
adb shell dumpsys window w | grep mCurrent
注意有些app加载完成后获取的activity可能无用,需要loading界面的activity
命令行启动app:
adb shell am start +包名/.Activity
执行上述命令即可看到模拟器启动了对应的app,如果失败请查找错误


配置Appium Desired Capabilities
首先启动Appium-desktop,点击右上角搜索样式按钮

{
  #text,操作系统
  "platformName": "Android",
  #text,系统版本
  "platformVersion": "6.0.1",
  #text,名称(没有硬性要求)
  "deviceName": "MuMu",
  #text,app包名(某灵魂交友app)
  "appPackage": "cn.soulapp.android",
  #text,对应的activity
  "appActivity": ".ui.splash.SplashActivity",
  #bool,在启动时不重置应用
  "noReset": true
}

点击右下角Start Session将启动该app并进入调试界面

python脚本样例

需打开模拟器,adb连接,启动appium-desktop(无需点击搜索框)

#导入webdriver模块
from appium import webdriver
#TouchAction执行辅助操作
from appium.webdriver.common.touch_action import TouchAction

#构造配置文件,与上面写的作用一致
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "6.0.1"
caps["deviceName"] = "MuMu"
caps["appPackage"] = "cn.soulapp.android"
caps["appActivity"] = ".ui.splash.SplashActivity"
caps["noReset"] = True
caps["ensureWebviewsHavePages"] = True
#此项可以防止appium在无操作后退出,可以保留600秒
caps['newCommandTimeout']=600

#连接到appium-desktop,使用caps字典作为配置文件
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

#该行代码将执行向上滑动操作,如果无效,可以尝试将long_press替换为press
TouchAction(driver).long_press(x=400, y=800).move_to(x=400,y=100).release().perform()
#该语句执行后app将会退出
#driver.quit()

更多操作请根据需要在网络中检索,总会找到你想要的答案

写在后面

配置环境忙活了半天,刷了两三条瞬间就完事儿了,说好的微信朋友圈采集也没有搞