目录
Swipe 滑动和拖拽事件(Scroll、drag_and_drop)
0. 环境基础
adb包含三个部分:
adb工作原理:

获取当前包名和界面名(告诉手机测试哪个应用程序的哪个一个界面)
adb shell dumpsys window | grep mFocusedApp
返回结果中,“/” 前的为包名,“/” 后的为界面名
文件传输
从电脑发送文件到手机: adb push 电脑文件路径 手机的文件夹路径
从手机中拉取文件:adb pull 手机文件路径 电脑的文件夹路径
获取app启动时间
adb shell am start -w 包名/启动名
点击图标 -> 系统资源调度 -> application程序启动 -> activity界面加载 -> 界面展示完成

获取手机日志
adb logcat
找日志中at……前面 第一个字符为 "E" 的均为错误信息
- 安装app到手机 adb install 路径/xx.apk
- 卸载手机上的app adb uninstall 包名
- 获取当前电脑已经连接的设备 adb devices
- 进入到安卓手机内部的Linux adb shell exit退出Linux
# 重启adb服务
- 启动adb服务器 adb start-server
- 停止adb服务器 adb kill-server
- 查看adb帮助 adb --help
- from appium import webdriver
- import time
-
- desired_caps = dict()
- desired_caps['platformName'] = 'Android'
- desired_caps['platformVersion'] = '10'
- # 设备名,按默认,主要用于限制iOS
- desired_caps['deviceName'] = '192.168.56.101:5555'
- # 包名
- desired_caps['appPackage'] = 'com.android.settings'
- # 界面名
- desired_caps['appActivity'] = '.Settings'
-
- # 解决中文输入问题
- desired_caps['unicodeKeyboard'] = True
- desired_caps['resetKeyboard'] = True
-
- driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
- time.sleep(5)
- driver.quit()
原理:
- # 打开指定包指定界面
- driver.start_activity(“appPackage包名”, “appActivity界面名”)
-
- # 获取包名
- driver.current_package
- # 获取界面名
- driver.current_activity
-
- # ——————关——————闭——————
- # 关闭当前app,不关闭驱动对象
- driver.close_app()
- # 关闭驱动对象,同时关闭所有关联的app
- driver.quit()
-
- # ——————安装卸载及是否安装——————
- # 安装app
- driver.install_app("app_path apk安装包路径")
- # 卸载app
- driver.remove_app("app_id 包名")
- # 判断app是否已经安装
- driver.is_app_installed("app_id 包名")
-
- # ——————将应用置于后台——————
- driver.background_app(seconds 秒数)
启动该程序使用Device Screenshot工具获取元素特征信息
- # 通过id定位(resource id)
- driver.find_element_by_id("id-value").click() #并点击
- # 通过class_name定位
- driver.find_element_by_class_name("class-value").send_keys("hello") #并输入hello
- # 通过xpath定位 # 包含则使用://*[contains(@变量名,'xx')]
- driver.find_element_by_xpath("xpath-value表达式://*[@变量名='xx']")
-
- # 定位一组元素 by_id / by_class_name / by_xpath
- driver.find_elements_by_id("xxxx")
- # 隐式等待(秒),全局有效
- driver.implicitly_wait(20)
-
- # 显式等待,对单个元素有效
- from selenium.webdriver.support.wait import WebDriverWait
- wait = WebDriverWait(driver, 5)
- # 仅对修饰元素有效
- back_button = wait.until(lambda x: x.find_element_by_xpath("xxxx"))
- back_button.click()
- element.click()
- element.send_keys("xxx")
- # 清空输入框内容
- element.clear()
- # 获取元素内容
- element.text
- element.location
- element.size
-
- # 获取元素属性 如:name(content-desc / text)、resourceId、className、enabled、clickable")
- element.get_arribute("属性名")
- # Swipe 从一个坐标滑动到另一个坐标,duration 滑动持续时间长短,单位:ms
- driver.swipe(start_x, start_y, end_x, end_y, duration=None)
-
- # scroll 从一个元素滑动到另一个元素,直到页面惯性结束自动停止
- button1 = driver.find_element_by_id("xxx")
- button2 = driver.find_element_by_id("xxxx")
- driver.scroll(button1, button2)
-
- # drag_and_drop 从一个元素滑动到另一个,第二个元素代替第一个元素的位置
- driver.drag_and_drop(button1, button2)
- # 创建TouchAction对象
- touch_action = TouchAction(driver)
- # 轻敲
- touch_action = touch_action.tap(element=元素, x=xxx, y=xxx, count=次数)
- # 执行
- touch.perform()
轻点tap、按下press、抬起release、等待wait、长按long_press、移动move_to
- # 轻敲 tap(element,x,y,count)
- TouchAction(driver).tap(element=元素, x=xxx, y=xxx, count=次数).perform()
- # 按下和抬起 press、release
- TouchAction(driver).press(x=xxx, y=xxx).release().press()..release().perform()
- # 等待 wait (单位:ms)
- TouchAction(driver).press(x=xxx, y=xxx).wait(2000).release().perform()
- # 长按 long_press
- TouchAction(driver).long_press(element, x=坐标, y=坐标, duration=持续时间).perform()
- # 移动 move_to
- TouchAction(driver).press(x=坐标, y=坐标).move_to(x=坐标, y=坐标).release().perform()
Android KeyCode:Android KeyCode列表_51CTO博客_event.keycode
- # 获取手机分辨率
- driver.get_window_size()
- # 截图
- driver.get_screenshot_as_file("path.filename")
-
- # 获取网络
- print(driver.network_connection)
- # 设置网络
- driver.set_network_connection(数字0-6)
-
- # 发送键到设备 Android Keycode
- driver.press_keycode("keycode", metastate=None)
- # 打开通知栏
- driver.open_notifications()
- # 返回键
- driver.press_keycode(4)
from appium.webdriver.connectiontype import ConnectionType
class ConnectionType:
NO_CONNECTION = 0
AIRPLANE_MODE = 1
WIFI_ONLY = 2
DATA_ONLY = 4
ALL_NETWORK_ON = 6
