环境搭建
- 安装jdk: https://www.oracle.com/java/technologies/downloads/#java17
- 配置环境变量JAVA_HOME为jdk路径
- 安装android_sdk: https://developer.android.com/studio?hl=zh-cn
- 下载android_studio,在SDK_Manager安装sdk
- 配置环境变量ANDROID_HOME为sdk安装路径
- 将platform-tools路径添加的系统环境变量
- 安装appium-desktop:https://github.com/appium/appium-desktop/releases
- 安装appium-inspector:https://github.com/appium/appium-inspector/releases
- 安装appium的python客户端:pip install appium-python-client==2.11.1
- 安装夜神模拟器,替换platform-tools下的adb.exe为模拟器的adb.exe
adb命令
-
重启adb服务:
adb kill-server adb start-server
-
查看连接的设备
adb devices
-
获取系统版本号
adb shell getprop ro.build.version.release
-
获取appPackage和appActivity(包名界面名)
adb shell dumpsys window windows | findstr mFocusedApp
-
文件交互
# 删除文件 adb shell rm -r /sdcard/Pictures/* # push文件 adb push {path} /sdcard/Pictures/ # pull文件 adb pull "/sdcard/DCIM/YouCam Perfect/" {path}
常用操作介绍
连接设备
from appium import webdriver
from appium.options.common import AppiumOptions
desired_caps = dict(
deviceName="127.0.0.1:62001",
platformName="Android",
appPackage="com.cyberlink.youperfect",
appActivity=".ui.launcher.LauncherActivity",
)
options = AppiumOptions().load_capabilities(desired_caps)
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", options=options)
time.sleep(5)
driver.quit()
driver操作
# 安装应用
driver.install_app(r"C:\Users\Administrator\Desktop\apk\玩美相机.apk")
# 卸载应用
driver.remove_app('com.cyberlink.youperfect')
# 判断应用是否安装
print(driver.is_app_installed('com.cyberlink.youperfect'))
# 获取当前操作应用包名
print(driver.current_package)
# 获取当前操作应用界面名
print(driver.current_activity)
# 获取当前界面的xml源码
print(driver.page_source)
# 获取当前手机的时间
print(driver.device_time)
# 打开手机通知栏
driver.open_notifications()
# - 获取当前手机的分辨率
print(driver.get_window_size())
# 获取当前手机的网络状态
print(driver.network_connection)
# 设置手机网络状态
driver.set_network_connection(2)
# 截图
driver.save_screenshot("jietu.png")
元素定位
# xpath定位
driver.find_element(By.XPATH, "//*[@text='同意并继续']").click()
# id定位
driver.find_element(By.ID, "com.cyberlink.youperfect:id/agree_check_box").click()
# class_name定位
driver.find_elements(By.CLASS_NAME, 'android.widget.ImageButton')[0].click()
# 坐标定位点击
driver.tap([(150, 290)], duration=100)
元素属性
el = driver.find_element(By.XPATH, "//*[@text='同意并继续']")
# 获取元素的文本内容
print(el.text)
# 获取元素的属性值
print(el.get_attribute("class"))
# 获取元素的坐标值
print(el.location)
# 获取元素的宽高(大小)
print(el.size)
# 对元素进行点击操作
el.click()
# 对元素进行输入操作
el.send_keys("xxx")
滚动和事件链
# 通过元素的相对位置进行滚动
el1 = driver.find_element(By.XPATH, '//*[@text="蓝牙"]')
el2 = driver.find_element(By.XPATH, '//*[@text="应用"]')
driver.scroll(el2, el1)
# 通过坐标进行滚动操作
driver.swipe(144, 1759, 144, 799)
# 创建事件链对象
action = TouchAction(driver)
# press:按下
# wait:按下时间,单位毫秒
# move_to 移动
# release 松手
# 事件链完成之后要进行提交
# perform()
time.sleep(1)
action.press(x=210, y=900).wait(100) \
.move_to(x=540, y=900).wait(100) \
.move_to(x=867, y=900).wait(100) \
.move_to(x=540, y=1234).wait(100) \
.move_to(x=210, y=1560).wait(100) \
.move_to(x=539, y=1560).wait(100) \
.move_to(x=867, y=1560).wait(100)
# 之前按下操作,完成之后,需要松手
action.release()
# 提交事件链
action.perform()