1. 准备工作
- 安装Appium
- Android开发环境(可通过Android Studio安装SDK)
- Python版本的Appium API
- 连接手机
- adb devices # 安卓下的工具,查看连接设备
-
获取app的入口
2. 运行Appium
- Start server
- New Session Window
- 设置
platformName
deviceName
appPackage
appActivity
unicodeKeyboard:True # 是否需要输入非英文之外的语言
resetKeyboard:True
# app # app地址
# noReset=true # 不清理数据
- 可以录制产生代码,可以使用API
3. 相关语法
- 定位,三种方式
- class
- id
- xpath
- click
- sendKeys # 输入
- sendKeyEvent # 输入某一个事件
- swipe # 滑动
- runAppInBackground
4. 调试分析
- driver.findElementByXPath(“//*”) # 查找所有元素
- driver.getPageSource() # 打印所有控件
5. 代码实例
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
class Action():
def __init__(self):
"""
初始化
"""
# 驱动配置,打开app
self.desired_caps = {
'platformName': 'Android',
'deviceName': 'MI_01',
'appPackage': 'com.jingdong.app.mall',
'appActivity': 'main.MainActivity',
'unicodeKeyboard': 'True',
'resetKeyboard': 'True'
}
DRIVER_SERVER = 'http://localhost:4733/wd/hub'
TIMEOUT = 300
self.driver = webdriver.Remote(DRIVER_SERVER, self.desired_caps)
self.wait = WebDriverWait(self.driver, TIMEOUT)
def comments(self):
# 同意京东隐私
# b0 = self.wait.until(EC.presence_of_element_located((By.ID, 'com.jingdong.app.mall:id/bso')))
# 有时By.ID并不能查找到元素,换用xpath方式能查到,但是缺点就是速度慢
b0 = self.wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@resource-id='com.jingdong.app.mall:id/bso']")))
b0.click()
# 新人礼包注册广告关闭
b1 = self.wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@resource-id='com.jingdong.app.mall:id/lh']")))
b1.click()
# 点击进入搜索页面
search = self.wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@resource-id='com.jingdong.app.mall:id/a3o']")))
search.click()
# 输入搜索文本
box = self.wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@resource-id='com.jd.lib.search:id/search_text']")))
box.set_text('手机')
# 点击搜索按钮
button = self.wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@resource-id='com.jingdong.app.mall:id/atq']")))
button.click()
def scroll(self):
while True:
# 模拟拖动
self.driver.swipe(FLICK_START_X, FLICK_START_Y + FLICK_DISTANCE, FLICK_START_X, FLICK_START_Y)
sleep(1)
def main(self):
self.comments()
self.scroll()
if __name__ == '__main__':
action = Action()
action.main()
6. Desired Capabilities相关
**Server capabilities**
Capability Appium 、Selendroid
platformName 平台的名称:iOS, Android, or FirefoxOS
platformVersion 移动设备的系统版本号,7.1, 4.4
deviceName IOS:instruments -s devices,Android:随便写
app 安装文件路径:/abs/path/to/my.apk or http://myapp.com/app.ipa
browserName 测试的web浏览器,如果是测app则忽略
newCommandTimeout 等待新命令的最长时间,超时后退出。默认是60s
autoLaunch 是否自动安装和启动,默认true
language 模拟器的语言设置
locale 模拟器的地区设置
udid 设备号
orientation 模拟器的横竖屏设置
autoWebview Move directly into Webview context
noReset 在当前session前不重置app状态
fullReset ios删除文件夹,Android删除app数据。
**android only**
appActivity 要启动的Activity
appPackage 要启动的包
appWaitActivity 等待的Activity
appWaitPackage 等待的包
deviceReadyTimeout 等待设备就绪的时间
androidCoverage
enablePerformanceLogging (Chrome and webview only)default=false
androidDeviceReadyTimeout
androidDeviceSocket
avd
avdLaunchTimeout
avdReadyTimeout
avdArgs
useKeystore
keystorePath
keystorePassword
keyAlias
keyPassword
chromedriverExecutable
autoWebviewTimeout
intentAction
intentCategory
intentFlags
optionalIntentArguments
unicodeKeyboard
resetKeyboard
noSign Skip checking and signing,work only with UiAutomator and not with selendroid
ignoreUnimportantViews
**ios only**
calendarFormat
bundleId
udid
launchTimeout
locationServicesEnabled
locationServicesAuthorized
autoAcceptAlerts
nativeInstrumentsLib
nativeWebTap
safariAllowPopups
safariIgnoreFraudWarning
safariOpenLinksInBackground
keepKeyChains
localizableStringsDir
processArguments
interKeyDelay
showIOSLog