精华内容
下载资源
问答
  • 手机APP自动化 Appium教程

    万次阅读 多人点赞 2021-01-19 21:00:20
    手机APP 自动化有什么用? 自动化完成一些重复性的任务 比如微信客服机器人 爬虫 自动化测试 Appium 自动化方案的特点: 开源免费 支持多个平台 支持多种类型的自动化 支持多种编程语言 自动化原理 我们先来看...

    Appium原理与安装

    Appium 是一个移动 App (手机应用)自动化工具。

    手机APP 自动化有什么用?

    • 自动化完成一些重复性的任务
    • 比如微信客服机器人
    • 爬虫
    • 自动化测试

    Appium 自动化方案的特点:

    • 开源免费
    • 支持多个平台
    • 支持多种类型的自动化
    • 支持多种编程语言

    自动化原理

    我们先来看一下Appium自动化的原理图

    在这里插入图片描述
    这图是不是很眼熟?

    对啦,和Selenium 原理图很像。因为 Appium自动化架构就是借鉴的Selenium。

    大家看看这幅图, 包含了 3个主体部分 : 自动化程序、Appium Server、移动设备

    • 自动化程序

      自动化程序是由我们来开发的,实现具体的 手机自动化 功能。

      要发出具体的指令控制手机,也需要使用 客户端库。

      和Selenium一样,Appium 组织 也提供了多种编程语言的客户端库,包括 java,python,js, ruby等,方便不同编程语言的开发者使用。

      我们需要安装好客户端库,调用这些库,就可以发出自动化指令给手机。

    • Appium Server

      Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,并且转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。

    • 手机设备

      我们这里说的手机设备,其实不仅仅是手机,包括所有 苹果、安卓的移动设备,比如:手机、平板、智能手表等。

      为了直观方便的讲解,这里我们简称: 手机

      当然手机上也包含了 我们要自动化控制的 手机应用APP。

      手机设备为什么能 接收并且处理自动化指令呢?

      因为,Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令

      比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:

    • 自动化程序 调用客户端库相应的函数, 发送 点击元素 的指令(封装在HTTP消息里)给 Appium Server

    • Appium Server 再转发这个指令给 手机上的自动化代理

    • 手机上的自动化代理 接收到 指令后,调用手机平台的自动化库,执行点击操作,返回点击成功的结果给 Appium Server

    • Appium Server 转发给 自动化程序

    • 自动化程序了解到本操作成功后,继续后面的自动化流程

    其中,自动化代理控制,使用的什么库来实现自动化的呢?

    如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后)

    如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)

    这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等。

    自动化环境搭建

    本教程主要讲解 安卓APP的自动化。

    环境搭建需要下载安装不少软件,而且还有不少是国外网站下载的。

    为了方便各位朋友,博主把这些软件 最新的安装包 都放在如下的csdn资源中了,请大家自行下载。

    链接:https://download.csdn.net/download/m0_50944918/14827713

    安装client编程库

    根据原理图, 我们知道自动化程序需要调用客户端库和 Appium Server 进行通信。

    因为我们介绍Python语言开发,所以当然是用pip安装,如下

    pip install appium-python-client
    

    pycharm用户可以设置里安装

    安装Appium Server

    Appium Server 是用 nodejs 运行的,基于js开发出来的。

    Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具 打包在里面了,只需要简单的下载安装就可以了。

    可以从 上面给出的链接地址 下载安装: Appium-windows-1.15.1.exe

    官方下载地址点这里

    安装JDK

    本教程主要讲解 安卓APP的自动化,必须要安装安卓SDK(后面会讲到),而安卓SDK需要 JDK 环境。

    可以从 上面给出的链接地址 下载安装: jdk-8u211-windows-x64.exe

    加粗样式
    安装好之后,还需要添加一个环境变量 JAVA_HOME ,指定 值 为 jdk安装目录,比如

    JAVA_HOME   d:\tools\java\jdk1.8.0_211
    

    安装 Android SDK

    对于安卓APP的自动化,Appium Server 是需要 Android SDK的。

    因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。

    可以从 上面给出的链接地址 下载最新的 Android SDK文件包: androidsdk.zip ,并且解压,即可。

    解压完成后,需要 配置一下 添加一个 环境变量 ANDROID_HOME ,设置值为sdk包解压目录,比如 d:\tools\androidsdk

    另外,还推荐大家配置环境变量 PATH ,加入 adb所在目录, *d:\tools\androidsdk\platform-tools*

    注意:是 添加 该目录到环境变量PATH中, !!!不是替换!!! ,否则会导致系统命令都找不到的严重后果,初学者 请对照视频讲解操作。

    连接手机

    上述的软件环境都准备好以后,要自动化手机APP,需要:

    在你运行程序的电脑上 用 USB线 连接上 你的安卓手机

    进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上),

    退出到上级菜单,在开发者模式中,启动USB调试

    如果手机连接USB线后,手机界面弹出 类似 如下提示。

    在这里插入图片描述
    选择 允许USB调试。

    注意:

    有的手机系统,可能需要一些额外的选项需要设置好。

    比如,有的手机,开发者选项里 需要打开 允许通过USB安装应用 等。

    总之,给USB开发调试 尽可能方便的控制手机。

    连接好以后,打开命令行窗口, 执行 adb devices -l 命令来列出连接在电脑上的安卓设备。

    如果输出 类似如下的内容:

    List of devices attached
    4d0035dc767a50bb        device product:t03gxx model:GT_N7100 device:t03g
    

    表示电脑上可以查看到 连接的设备,就可以运行自动化程序了。

    一个例子

    打开csdn的APP 点搜索

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2021/1/18 19:11
    # @Author  : huni
    # @File    : APP.py
    # @Software: PyCharm
    from appium import webdriver
    from appium.webdriver.extensions.android.nativekey import AndroidKey
    from time import sleep
    
    desired_caps = {
      'platformName': 'Android', # 被测手机是安卓
      'platformVersion': '10', # 手机安卓版本
      'deviceName': 'xxx', # 设备名,安卓手机可以随意填写
      'appPackage': 'net.csdn.csdnplus', # 启动APP Package名称
      'appActivity': '.activity.SplashActivity', # 启动Activity名称
      'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
      'resetKeyboard': True, # 执行完程序恢复原来输入法
      'noReset': True,       # 不要重置App
      'newCommandTimeout': 6000,
      'automationName' : 'UiAutomator2'
      # 'app': r'd:\apk\bili.apk',
    }
    
    # 连接Appium Server,初始化自动化环境
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    sleep(4)
    driver.find_element_by_class_name('android.widget.TextView').click()
    sleep(5)
    driver.quit()
    
    
    

    运行代码前,要先 运行 Appium Desktop

    查找 应用 Package 和 Activity

    没有apk:
    如果你应用已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面

    然后执行

    adb shell dumpsys activity recents | find "intent={"
    

    会显示如下,最近的 几个 activity 信息,

    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.ui.splash.SplashActivity}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher}
    intent={flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1378][10322746]}
    intent={flg=0x10000000 cmp=com.tencent.mm/.ui.LauncherUI}
    

    有apk:
    如果你已经获取到了 apk,在命令行窗口执行

    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
    

    输出信息中,就有应用的package名称

    package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9'
    

    在命令行窗口执行

    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
    

    输出信息中,就有应用的启动Activity

    launchable-activity: name='tv.danmaku.bili.ui.splash.SplashActivity'  label='' icon=''
    

    定位元素

    代码规则:

    从示例代码,大家就可以发现,和Selenium Web自动化一样,要操作界面元素,必须先 定位(选择)元素。

    Appium是基于Selenium的,所以 和 Selenium 代码 定位元素的 基本规则相同:

    find_element_by_XXX 方法,返回符合条件的第一个元素,找不到抛出异常

    find_elements_by_XXX 方法,返回符合条件的所有元素的列表,找不到返回空列表

    通过 WebDriver 对象调用这样的方法,查找范围是整个界面

    通过 WebElement 对象调用这样的方法,查找范围是该节点的子节点

    界面元素查看工具

    做 Selenium Web 自动化的时候,要找到元素,我们是通过浏览器的开发者工具栏来查看元素的特性,根据这些特性(属性和位置),来定位元素

    Appium 要自动化手机应用,同样需要工具查看界面元素的特征。

    常用的查看工具是: Android Sdk包中的 uiautomateviewerAppium Desktop 中的 Appium Inspector

    uiautomateviewer

    安卓查看APP界面元素,最常用的就是 Android SDK 中的工具 uiautomateviewer ,它在SDK目录目录 的 tools\bin 目录中

    和Selenium一样,我们要定位选择元素,也是根据元素的特征,包括

    • 元素的属性
    • 元素的相对位置(相对父元素、兄弟元素等)

    Appium Inspector

    Appium Desktop 中的 Appium Inspector 也可以查看元素。

    它的一个优点是可以直接验证 选择表达式是否能定位到元素

    参考视频里面的讲解。

    定位元素的方法

    根据ID

    在Selenium Web自动化教程里,我们说过,如果能根据ID选择定位元素,最好根据ID,因为通常来说ID是唯一的,所以根据ID选择 效率高。

    在安卓应用自动化的时候,同样可以根据ID查找。

    但是这个ID ,是安卓应用元素的 resource-id 属性

    使用如下代码

    driver.find_element_by_id('expand_search')
    

    根据CLASS NAME

    安卓界面元素的 class属性 其实就是根据元素的类型,类似web里面的tagname, 所以通常不是唯一的。

    通常,我们根据class 属性来选择元素, 是要选择多个而不是一个。

    当然如果你确定 要查找的 界面元素的类型 在当前界面中只有一个,就可以根据class 来唯一选择。

    使用如下代码

    driver.find_elements_by_class_name('android.widget.TextView')
    

    根据ACCESSIBILITY ID

    元素的 content-desc 属性是用来描述该元素的作用的。

    如果要查询的界面元素有 content-desc属性,我们可以通过它来定位选择元素。

    使用如下代码

    driver.find_element_by_accessibility_id('找人')
    

    Xpath

    Appium 也支持通过 Xpath选择元素。

    但是其可靠性和性能不如 Selenium Web自动化。因为Web自动化对Xpath的支持是由浏览器实现的,而Appium Xpath的支持是 Appium Server实现的。

    毕竟,浏览器产品的成熟度比Appium要高很多。

    当然,Xpath是标准语法,所以这里表达式的语法规则和 以前学习的Selenium里面Xpath的语法是一样的,比如

    driver.find_element_by_xpath('//ele1/ele2[@attr="value"]')
    

    注意:

    selenium自动化中, xpath表达式中每个节点名是html的tagname。

    但是在appium中, xpath表达式中 每个节点名 是元素的class属性值。

    比如:要选择所有的文本节点,就使用如下代码

    driver.find_element_by_xpath('//android.widget.TextView')
    

    安卓 UIAutomator

    根据id,classname, accessibilityid,xpath,这些方法选择元素,其实底层都是利用了安卓 uiautomator框架的API功能实现的。

    参考 这里的谷歌安卓官方文档介绍:https://developer.android.google.cn/training/testing/ui-automator

    也就是说,程序的这些定位请求,被Appium server转发给手机自动化代理程序,就转化为为uiautomator里面相应的定位函数调用。

    其实,我们的自动化程序,可以直接告诉 手机上的自动化代理程序,让它 调用UI Automator API的java代码,实现最为直接的自动化控制。

    主要是通过 UiSelector 这个类里面的方法实现元素定位的,比如

    code = 'new UiSelector().text("热门").className("android.widget.TextView")'
    ele = driver.find_element_by_android_uiautomator(code)
    ele.click()
    

    就是通过 text 属性 和 className的属性 两个条件 来定位元素。

    UiSelector里面有些元素选择的方法 可以解决 前面解决不了的问题。

    比如

    • text 方法

      可以根据元素的文本属性查找元素

    • textContains

      根据文本包含什么字符串

    • textStartsWith

      根据文本以什么字符串开头

    • textmartch 方法

      可以使用正则表达式 选择一些元素,如下

      code = 'new UiSelector().textMatches("^我的.*")'
      

    UiSelector 的 instance 和 index 也可以用来定位元素,都是从0开始计数, 他们的区别:

    • instance是匹配的结果所有元素里面 的第几个元素

    • index则是其父元素的几个节点,类似xpath 里面的*[n]

    UiSelector 的 childSelector 可以选择后代元素,比如

    code = 'new UiSelector().resourceId("tv.danmaku.bili:id/recycler_view").childSelector(new UiSelector().className("android.widget.TextView"))'
    
    ele = driver.find_element_by_android_uiautomator(code)
    

    注意: childSelector后面的引号要框住整个 子 uiSelector 的表达式

    展开全文
  • 手机APP自动化环境搭建
  • 手机app自动化测试robotium
  • 手机App自动化测试

    2016-11-14 10:27:32
    手机App自动化测试之前从未接触过手机测试,从去年开始做手机测试。喜欢写代码喜欢做自动化测试的我,一边学习做手机手工测试,一边了解如何做手机的自动化测试。 Monkey test MonkeyRunner Appium Appium+Robot ...

    手机App自动化测试

    之前从未接触过手机测试,从去年开始做手机测试。喜欢写代码喜欢做自动化测试的我,一边学习做手机手工测试,一边了解如何做手机的自动化测试。

    1. Monkey test

    2. MonkeyRunner

    3. Appium

    4. Appium+Robot Framework

    5. Robotium

    6. Performance Testing

    展开全文
  • 手机APP自动化测试简单录制

    千次阅读 2015-12-25 16:03:21
    随着智能手机近年来的快速增长,从游戏娱乐到移动办公的各式各样的手机APP软件渗透到我们的生活中,手机APP自动化测试也逐渐兴起,从Monkey本地测试到云测试平台,现在我要介绍的这种自动化测试方法不需要写脚本,...
    随着智能手机近年来的快速增长,从游戏娱乐到移动办公的各式各样的手机APP软件渗透到我们的生活中,手机APP自动化测试也逐渐兴起,从Monkey本地测试到云测试平台,现在我要介绍的这种自动化测试方法不需要写脚本,适合初学者。
    工具:
    l  小萝贝虚拟手机
    l  按键精灵
    步骤:
    1.      百度搜索小萝贝虚拟手机 3.6M与按键精灵40.5M下载安装后,将手机用usb数据线插入电脑,打开运行小萝贝虚拟手机
    2.      打开按键精灵,点击新建按钮新建一个空白脚本
    3.      调整好小萝贝与按键精灵的布局,点击按键精灵的录制按钮,开始录制脚本
    4.      点击开始录制按钮后,即可操作小萝贝虚拟手机投射的手机画面反向控制手机,按键精灵会录制鼠标的点击坐标,而小萝贝虚拟手机会通过鼠标的点击、滑动等事件反向控制连接的手机,实现手机APP的自动化测试

    5.      在录制脚本时可以点击小萝贝虚拟手机右侧的工具栏中的截屏按钮来截取屏幕,便于跑完脚本后截图对比来确定APP显示时候正确
    6.      脚本录制完后点击停止按钮停止脚本录制,再点击保存按钮退出录制模式并保存录制的脚本
    7.      待脚本生成后点击调试按钮
    8.      点击左下角的启动键进行脚本回放,不要控制鼠标,此时鼠标会自动执行录制好的点击动作,点击小萝贝虚拟手机进而控制手机实现手机APP自动化测试
    缺点:
    1.只能做简单的功能回归性测试、UI测试
    2.坐标点击操作,可复用性差
    优点:
    1.操作简单易学无需写脚本,适合初学者
    2.操作工具小型易安
    展开全文
  • 在学习了Python之后,这两天写了一个小的自动化程序来一起分享。 首先说明的是,图片你需要上传到你的模拟器上面。 # This sample code uses the Appium python client # pip install Appium-Python-Client # ...

    在学习了Python之后,这两天写了一个小的自动化程序来一起分享。

    首先说明的是,图片你需要上传到你的模拟器上面。

    # This sample code uses the Appium python client
    # pip install Appium-Python-Client
    # Then you can paste this into a file and simply run with Python
    
    # http://appium.io/docs/en/writing-running-appium/caps/index.html
    import os
    from appium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    import time
    
    caps = {}
    caps["automationName"] = "UiAutomator2"
    caps["platformName"] = "Android"
    caps["deviceName"] = "127.0.0.1:21503"  # 使用自己的手机devices name
    
    caps['noReset'] = True
    caps['fullReset'] = False
    caps['appPackage'] = "com.sina.weibolite"
    caps['appActivity'] = "com.sina.weibo.SplashActivity"
    
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
    driver.implicitly_wait(30)
    import os
    jpgfile = os.path.join(os.path.dirname(__file__),'helloworld.jpg')
    # 推送图片
    driver.push_file('/sdcard/DCIM/helloworld.jpg',source_path=jpgfile)
    #
    while True:
        try:
            create_btn_android = 'new UiSelector().className("android.widget.TextView").index(0).resourceId("com.sina.weibolite:id/titleSave")'
            driver.find_element_by_android_uiautomator(create_btn_android).click()
            break
        except NoSuchElementException:
            driver.find_element_by_android_uiautomator('new UiSelector().text("不了,谢谢").index(0)').click()
    
    weibo_content = """
    今天搭建一起做app 自动化测试,学习了很多知识。
    
    学习了如下内容:
    1.appium 环境配置
    2.元素定位
    3.自动发微博
    """
    
    edit_id='com.sina.weibolite:id/edit_view'
    driver.find_element_by_id(edit_id).send_keys(weibo_content)
    
    # 发图片
    image_android = 'new UiSelector().resourceId("com.sina.weibolite:id/tvTitle").text("相册").index(1)'
    driver.find_element_by_android_uiautomator(image_android).click()
    
    # 选择第一张
    first_image_android = 'new UiSelector().resourceId("com.sina.weibolite:id/photo_album_grideview_item_select").index(2)'
    driver.find_element_by_android_uiautomator(first_image_android).click()
    
    
    driver.find_element_by_accessibility_id('下一步').click()
    
    
    driver.find_element_by_id('com.sina.weibolite:id/btn_confirm_edit').click()
    
    send_btn_android='new UiSelector().resourceId("com.sina.weibolite:id/titleSave").text("发送").index(0)'
    
    driver.find_element_by_android_uiautomator(send_btn_android).click()
    
    driver.quit()

     

    展开全文
  • 随着各种手机app越来越多,大家花在手机上的时间越来越多,同时产生了很多需要签到的需求,今天我就带大家来实现一个模拟app签到的功能 一、下载安装Fiddler 1.介绍 Fiddler是位于客户端和服务端之间的代理,也是...
  • 使用appium框架进行手机app自动化测试过程中,遇到了xpath定位不到元素的问题。如下图: ![图片说明](https://img-ask.csdn.net/upload/201607/11/1468215538_315712.png) 我用的定位方法是xpath,如下: device=...
  • airtest是网易开发的一款自动化测试工具,主要用于游戏自动化开发和测试,目前支持对windows应用、手机app等,同时支持录制操作,甚至达到无需代码编写即可完成测试,能够识别图中是否存在目标元素(其实是比较目标...
  • python利用appium实现手机APP自动化

    万次阅读 2019-04-26 14:08:40
    写这个东西也是自己喜欢研究些自动化的东西,以下全是自己的经验所得,由于开源的软件对于各版本以及操作系统要求很高,会经常碰到一些不兼容的问题,这个都属于正常的,换版本就对了。 如果你感觉学不会?莫慌,小...
  • #coding=utf-8 from appium import webdriver desired_caps = { ‘platformName’: ‘Android’, ‘platformVersion’: ‘10.0.0’, ...‘appActivity’: ‘.ui.LauncherUI’, ‘automationName’: ‘UiAutomator

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,814
精华内容 725
关键字:

手机app自动化