手机控制脚本之Appium的使用

本文详细介绍Appium自动化测试工具的使用方法,从环境搭建到实战案例,包括Android开发环境配置、Appium服务器启动、测试代码编写及调试技巧。通过具体示例展示了如何使用Python进行京东APP的自动化测试,涉及元素定位、事件触发、页面滑动等关键操作。
部署运行你感兴趣的模型镜像

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

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值