在实现自动化 APP 打卡行为的项目前,需要先了解以下方面的知识或技术:
-
Android 系统和 APP 的基本原理和架构,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供器(Content Provider)、意图(Intent)等组件的作用和用法,以及 Android 系统的权限机制和安全策略。
-
Android 应用开发的基本工具和环境,包括 Android Studio、Gradle、ADB、Logcat、Emulator 等工具的安装和配置,以及如何创建、编译、运行、调试和测试 Android 项目。
-
Android 应用自动化测试的基本框架和方法,包括 Espresso、UI Automator、Appium、Robotium 等框架的特点和用法,以及如何编写、执行和分析自动化测试用例。
-
Android 应用逆向工程的基本技巧和工具,包括 APKTool、dex2jar、JD-GUI、Frida、Xposed 等工具的作用和用法,以及如何反编译、分析、修改和重打包 Android 应用。
我为何选择Appium?
-
不需要了解Android的编译原理
-
不需要为此额外学一门语言
-
跨平台
-
多语种
-
Java
-
Python
-
Ruby
-
JS
-
……
-
-
稳定的API
Appium介绍
-
HTTP服务端
-
除非你想编写原生的raw HTTP来调用或者使用cURL,否则使用APPium自动化设计你所选择的编程语言使用Appium
-
C/S分离
应用层
npm i --location=global appium
在PowerShell内输入:appium。出现Welcome to appium v.*.*则表示Appium服务器已启动正在运行。你可以在任何地方启动。
安装 UiAutomator2 驱动程序
设置Android自动化
-
设置环境变量
-
下载Android Studio ——> 创建和管理虚拟设备 连接手机设备后,运行adb devices来查看设备是否连接 安装教程
安装并打开 Android Studio 后,请按以下步骤安装 Android版本SDK:
-
依次点击 Tools > SDK Manager。
-
在 SDK Platforms 标签中,选择 Android 10 (29)。
-
在 SDK Tools 标签中,选择 Android SDK Build-Tools 29(或更高版本)。
-
点击 Apply 开始安装。
环境变量
SDK安装好后,进入到SDK目录,将其设置为ANDROID_HOME变量
目录结构
1. ANDROID_HOME
2. platfrom
安装uiautomator2驱动
appium driver install uiautomator2
运行完成后显示:
√ Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
i Driver uiautomator2@2.29.4 successfully installed
- automationName: UiAutomator2
- platformNames: ["Android"]
如果你喜欢用npm来管理Appium以及它的驱动可以查看:管理指南扩展
再次在PowerShell处运行appium。你应该会看到:Available drivers的内容
手机设备连接
adb devices
代码测试(Python)
安装Appium库
pip install Appium-Python-Client
import unittest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
appPackage='com.android.settings',
language='cn',
locale='CN'
)
appium_server_url = '<http://localhost:4723>' # **处为你的设备IP地址
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(appium_server_url, capabilities)
def tearDown(self) -> None:
if self.driver:
self.driver.quit()
def test_find_battery(self) -> None:
el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@test="Battery"]')
el.click()
if __name__ == '__main__':
unittest.main()
运行出错:writing to settings requires:android.permission.WRITE_SECURE_SETTINGS