手机控制脚本之Appium的使用

5 篇文章 0 订阅
2 篇文章 0 订阅

1. 准备工作

  • 安装Appium
  • Android开发环境(可通过Android Studio安装SDK)
  • Python版本的Appium API
  • 连接手机    
  1. adb devices     # 安卓下的工具,查看连接设备
  2. 获取app的入口 

2. 运行Appium

  • Start server
  • New Session Window
  • 设置
platformName
deviceName
appPackage
appActivity
unicodeKeyboard:True # 是否需要输入非英文之外的语言
resetKeyboard:True
# app # app地址
# noReset=true # 不清理数据
  • 可以录制产生代码,可以使用API

 

3. 相关语法

  • 定位,三种方式
  1. class
  2. id
  3. 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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值