Appium 学习笔记 -- 1. 安装和验证

本文详细介绍如何在Windows环境下,使用Appium进行Android平台的自动化测试。从安装配置Appium及必要依赖,到运行第一个测试案例,包括下载测试应用、编写测试脚本、启动Appium服务和虚拟设备,直至执行测试并解析输出结果。

appium有两种安装方式,一种是使用npm命令行安装方式,另外一种是下载Appium Desktop图形化界面安装。本文使用npm命令行安装方式。

背景

  • 操作系统 : Windows 10 64位 专业版
  • node 已经安装 (v.10.16.3)
  • Java 已经安装 (jdk1.8.0_77)
    • 环境变量 JAVA_HOME 已经设置
  • Android SDK 已经安装
    • 环境变量 ANDROID_HOME 已经设置

为了命令行使用各种工具方便,我已经将以下内容添加到环境变量PATH中 :

  1. %ANDROID_HOME%\tools
  2. %ANDROID_HOME%\platform-tools

安装步骤

1. 安装 appium

打开一个cmd窗口,使用如下命令安装appium:

npm install -g appium --registry=https://registry.npm.taobao.org

备注 :

  1. 全局安装
  2. 使用国内淘宝镜像以提高速度

安装完成后使用如下命令查看所安装的appium版本 :

appium -v

结果输出 :

1.16.0

2. 安装 appium-doctor

打开一个cmd窗口,使用如下命令安装appium-doctor:

npm install -g appium-doctor --registry=https://registry.npm.taobao.org

备注 :

  1. 全局安装
  2. 使用国内淘宝镜像以提高速度

安装完成后使用如下命令查看所安装的appium-doctor版本 :

appium-doctor --version

结果输出 :

1.13.0

3. 使用 appium-doctor 检测 appium 工作环境

cmd窗口中,使用如下命令检测针对android平台appium安装是否就绪 :

appium-doctor --android

然后你会看到类似如下结果 :

info AppiumDoctor Appium Doctor v.1.13.0
info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
info AppiumDoctor  ✔ The Node.js binary was found at: D:\Program Files\nodejs\node.EXE
info AppiumDoctor  ✔ Node version is 10.16.3
info AppiumDoctor  ✔ ANDROID_HOME is set to: D:\programs\Android\sdk
info AppiumDoctor  ✔ JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_77
info AppiumDoctor  ✔ adb exists at: D:\programs\Android\sdk\platform-tools\adb.exe
info AppiumDoctor  ✔ android exists at: D:\programs\Android\sdk\tools\android.bat
info AppiumDoctor  ✔ emulator exists at: D:\programs\Android\sdk\tools\emulator.exe
info AppiumDoctor  ✔ Bin directory of %JAVA_HOME% is set
info AppiumDoctor ### Diagnostic for necessary dependencies completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor ### Diagnostic for optional dependencies starting ###
WARN AppiumDoctor  ✖ opencv4nodejs cannot be found.
info AppiumDoctor  ✔ ffmpeg is installed at: C:\Program Files\ImageMagick-7.0.9-Q16\ffmpeg.EXE. ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
WARN AppiumDoctor  ✖ mjpeg-consumer cannot be found.
WARN AppiumDoctor  ✖ bundletool.jar cannot be found
info AppiumDoctor ### Diagnostic for optional dependencies completed, 3 fixes possible. ###
info AppiumDoctor
info AppiumDoctor ### Optional Manual Fixes ###
info AppiumDoctor The configuration can install optionally. Please do the following manually:
WARN AppiumDoctor  ➜ Why opencv4nodejs is needed and how to install it: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
WARN AppiumDoctor  ➜ mjpeg-consumer module is required to use MJPEG-over-HTTP features. Please install it with 'npm i -g mjpeg-consumer'.
WARN AppiumDoctor  ➜ bundletool.jar is used to handle Android App Bundle. Please read http://appium.io/docs/en/writing-running-appium/android/android-appbundle/ to install it. Also consider adding the ".jar" extension into your PATHEXT environment variable in order to fix the problem for Windows
info AppiumDoctor
info AppiumDoctor ###
info AppiumDoctor
info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!
info AppiumDoctor

备注 :
以上结果第一部分是必要依赖部分,由以上结果可见,所有必要的依赖条件都满足了,这说明appium在本机可以正常使用了。

4. 运行一个 android 测试

4.1 下载测试应用

这是一个由 appium 官方提供的测试应用。
假设该应用下载到本地以后,保存为 d:\ApiDemos-debug.apk

4.2 新建测试脚本

基于Webdriver.io创建一个测试脚本 :

  1. npm init -y
  2. npm install webdriverio
  3. 创建脚本如下index.js
// javascript

const wdio = require("webdriverio");
const assert = require("assert");

const opts = {
  port: 4723,
  capabilities: {
    platformName: "Android",
    platformVersion: "8",
    deviceName: "Android Emulator",
    app: "d:\\ApiDemos-debug.apk",
    appPackage: "io.appium.android.apis",
    appActivity: ".view.TextFields",
    automationName: "UiAutomator2"
  }
};

async function main () {
  const client = await wdio.remote(opts);

  const field = await client.$("android.widget.EditText");
  await field.setValue("Hello World!");
  const value = await field.getText();
  assert.equal(value,"Hello World!");

  await client.deleteSession();
}

main();

注意这里使用的android平台版本为8,这里要求下面使用的android虚拟机跟这里一致。

4.3 启动 appium

打开一个cmd命令行窗口,使用如下命令行启动appium :

appium

4.4 打开一个安卓虚拟器

注意上面的测试脚本中使用的android平台版本为8,所以要求这里使用的android虚拟机也是版本8

4.5 运行测试脚本

node index.js

可以观测到如下运行结果 :

  • 控制台输出
D:\tmp\Appium>node index.js
2020-01-13T07:11:59.156Z INFO webdriverio: Initiate new session using the webdriver protocol
2020-01-13T07:11:59.163Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session
2020-01-13T07:11:59.164Z INFO webdriver: DATA { capabilities:
   { alwaysMatch:
      { platformName: 'Android',
        platformVersion: '8',
        deviceName: 'Android Emulator',
        app: 'd:\\ApiDemos-debug.apk',
        appPackage: 'io.appium.android.apis',
        appActivity: '.view.TextFields',
        automationName: 'UiAutomator2' },
     firstMatch: [ {} ] },
  desiredCapabilities:
   { platformName: 'Android',
     platformVersion: '8',
     deviceName: 'Android Emulator',
     app: 'd:\\ApiDemos-debug.apk',
     appPackage: 'io.appium.android.apis',
     appActivity: '.view.TextFields',
     automationName: 'UiAutomator2' } }
2020-01-13T07:12:15.130Z INFO webdriver: COMMAND findElement("class name", "android.widget.EditText")
2020-01-13T07:12:15.134Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element
2020-01-13T07:12:15.135Z INFO webdriver: DATA { using: 'class name', value: 'android.widget.EditText' }
2020-01-13T07:12:17.016Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'adb1f252-017b-48d5-999c-d0592fd307c2',
  ELEMENT: 'adb1f252-017b-48d5-999c-d0592fd307c2' }
2020-01-13T07:12:17.030Z INFO webdriver: COMMAND elementClear("adb1f252-017b-48d5-999c-d0592fd307c2")
2020-01-13T07:12:17.031Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/clear
2020-01-13T07:12:17.080Z INFO webdriver: COMMAND elementSendKeys("adb1f252-017b-48d5-999c-d0592fd307c2", "Hello World!", <object>)
2020-01-13T07:12:17.083Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/value
2020-01-13T07:12:17.084Z INFO webdriver: DATA { text: 'Hello World!',
  value:
   [ 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' ] }
2020-01-13T07:12:18.570Z INFO webdriver: COMMAND getElementText("adb1f252-017b-48d5-999c-d0592fd307c2")
2020-01-13T07:12:18.575Z INFO webdriver: [GET] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/text
2020-01-13T07:12:19.275Z INFO webdriver: RESULT Hello World!
2020-01-13T07:12:19.282Z INFO webdriver: COMMAND deleteSession()
2020-01-13T07:12:19.286Z INFO webdriver: [DELETE] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c

虚拟机测试脚本执行截屏

在这里插入图片描述

参考资料

  1. Appium Get Started
  2. The UiAutomator2 Driver for Android
  3. Introduction to Appium
<think>好的,我现在需要处理用户关于Appium自动化测试学习笔记的请求。首先,用户引用了四篇站内资料,需要从中提取相关信息。接下来,我得确保回答结构清晰,符合用户的要求,比如分步骤讲解、包含代码示例等。 首先,用户需要详细的学习笔记,所以应该覆盖主要知识点,比如环境搭建、元素定位、手势操作、等待机制测试框架设计。根据引用[2],环境搭建部分需要提到使用appium-doctor检查环境,安装Node.jsAppium,以及驱动配置。这部分要详细,可能分点列出步骤,并加入代码示例,如npm命令。 然后是元素定位,引用[1][3]提到了查找元素的方法,比如ID、XPath、Class Name。需要说明这些方法的使用场景,并给出示例代码,如driver.find_element的用法。同时,显示等待也很重要,引用[1]中提到了WebDriverWait,需要解释其与隐式等待的区别,并给出代码示例,比如等待元素出现的代码块。 手势操作部分,引用[1][3]涉及滑动、长按、拖拽等操作。这里需要列出常见的触屏操作,并给出对应的Python代码示例,比如swipetap方法的使用。测试框架设计方面,引用[3][4]提到了Page Object模式数据驱动测试,需要简要说明这些设计模式的优势,并附上示例代码结构,比如BasePage类测试用例的编写。 另外,用户的问题生成部分需要相关的问题,比如环境配置常见问题、元素定位失败处理、手势操作优化等,确保问题与内容相关,并引导进一步学习。同时,注意引用标记的正确添加,每个引用部分末尾加上对应的[^n]。 检查是否符合系统级指令:行内公式没有涉及,可能不需要处理。独立公式也没有,所以没问题。LaTeX语法正确,使用中文回答。生成的问题需要四个,涵盖教程中的关键点,如环境配置、元素定位、等待机制手势操作优化。最后,确保回答结构清晰,分章节,代码用反引号包裹,引用正确。 现在开始组织内容,先概述Appium自动化测试的重要性,然后分章节详细讲解每个部分,加入代码示例引用,最后生成相关问题。注意语言简洁,步骤明确,帮助用户逐步理解实践。</think># Appium自动化测试系统化学习笔记 ## 一、环境搭建与验证 根据引用[2][4]的指导,完整环境配置包含以下关键步骤: 1. 安装Node.js与Appium Server ```bash npm install -g appium ``` 2. 使用appium-doctor进行环境验证 ```bash npm install -g appium-doctor appium-doctor --android # Android环境检查 appium-doctor --ios # iOS环境检查 ``` 3. 驱动配置示例(iOS需额外配置) ```bash npm install -g appium-xcuitest-driver git clone https://github.com/appium/ios-uicatalog.git # 获取官方测试项目[^4] ``` ## 二、元素定位核心方法 引用[1][3]详细说明了多种定位策略: ```python # ID定位(首选方式) driver.find_element(AppiumBy.ID, "com.example:id/login_btn") # XPath定位复杂元素 driver.find_element(AppiumBy.XPATH, '//Button[@text="确认"]') # Class链式定位 elements = driver.find_elements(AppiumBy.CLASS_NAME, 'android.widget.EditText') ``` ## 三、显示等待最佳实践 区别于隐式等待的全局设定,显示等待提供精准控制(引用[1]): ```python from selenium.webdriver.support.ui import WebDriverWait element = WebDriverWait(driver, 10).until( lambda x: x.find_element(AppiumBy.ACCESSIBILITY_ID, "动态加载元素") ) ``` ## 四、手势操作详解 引用[1][3]演示了触屏操作标准实现: ```python # 滑动屏幕(起始点→终点) driver.swipe(start_x=300, start_y=1000, end_x=300, end_y=300, duration=800) # 长按元素操作 element = driver.find_element(AppiumBy.ID, "com.example:id/item") driver.tap([(element.location['x'], element.location['y'])], 2000) # 持续2秒 # 多点触控(缩放操作) actions = MultiAction(driver) pinch_action = TouchAction().press(x=100,y=100).move_to(x=50,y=50).release() actions.add(pinch_action) actions.perform() ``` ## 五、测试框架设计模式 引用[3][4]建议的工程化实践: 1. **Page Object模式** ```python class LoginPage(BasePage): @property def username_field(self): return self.driver.find_element(AppiumBy.ID, 'username_input') def login(self, username, password): self.username_field.send_keys(username) # 其他操作... ``` 2. **数据驱动测试** ```python import pytest @pytest.mark.parametrize("user,passwd", test_data) def test_login(user, passwd): login_page = LoginPage(driver) login_page.login(user, passwd) assert dashboard_page.is_loaded() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值