专栏首页happyJaredAPP自动化:Appium极简上手

APP自动化:Appium极简上手

Selenium可以操控Web浏览器,手机APP平台也有类似的自动化测试工具:Appium; 全文分基础介绍、环境搭建和案例演示三部分介绍Appium,以帮助Learner快速的上手。

基础介绍

Appium是一个开源的自动化测试框架,用于原生,混合和移动Web应用程序。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。关于它的运作流程,用图来介绍会更加生动形象一些:

Appium运行流程、原理

在上图中,左边这部分是Appium-Client,通俗点来说,是用于间接驱动最右边的设备执行预定的自动化测试流程,支持使用多种主流的编程语言进行编写,这也是测试开发人员需要关注的核心部分;中间的Appium-Server是衔接左边客户端以及右边APP设备端的重要桥梁,一般仅需要配置好环境及启动运行;右边这块,当然就是实际执行自动化测试的终端,如IOS真机、Android真机,或者是模拟器。

环境搭建

  • NodeJS

Appium是使用nodejs实现的,因此Node是解释器,首先要确认安装好

上述的两种方式都可以搭建Appium-Server环境,后面演示会基于Appium-Desktop。(PS:下载太慢了?分享个百度网盘)

上述方式可以直接和间接搭建安装Android环境,因为后面要用到adb这个工具,所以需要配置好ANDROID_HOME这个环境变量。(PS:下载太慢了?分享个百度网盘)

  • Appium-Python-Client

后面会用到Python来编写Appium客户端:pip install Appium-Python-Client

okay,准备好以上几个环境后,启动Appium测试一下:

Appium Desktop Server

Appium Desktop Server

案例演示

下面演示在安卓真机上的自动登录Keep(APP)。

  1. 获取设备名称。操作流程:开启手机的开发和调试模式,连接电脑授权认证,Window + R输入并运行cmd,用adb devices -l查看:

获取设备号

  1. 启动Appium Server进行调试:

Inspector Session

Desired Capabilities

从上图可以看到,启动App Session需要有以下几个参数(点击了解更详细的Appium Desired Capabilities):

  • platformName,如AndroidiOS
  • deviceName,参考前面是如何获取的
  • appPackageappActivity,获取参考这里

综上所述,这里对应Keep的信息如下:

{
  "platformName": "Android",
  "deviceName": "WAS_AL00",
  "appPackage": "com.gotokeep.keep",
  "appActivity": "com.gotokeep.keep.splash.SplashActivity"
}

点击Start Session,之后可以看到手机端启动了Keep,并且在Appium Server端中同步展示:

Start Session

Keep

上述的操作通常只是用来方便获取控件id及定位的,下面基于Python编写完整的Appium-Client以实现自动登录操作:

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

server = 'http://localhost:4723/wd/hub'  # Appium Server, 端口默认为4723
desired_capabilities = {
    'platformName': 'Android',
    'deviceName': 'WAS_AL00',  # 需替换成你的deviceName
    'appPackage': 'com.gotokeep.keep',
    'appActivity': 'com.gotokeep.keep.splash.SplashActivity'
}

driver = webdriver.Remote(server, desired_capabilities)
wait = WebDriverWait(driver, 10)  # 最大查找等待超时时间:10s


def get_permission():
    """允许APP获取的某些权限"""

    try:
        ask = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/do_not_ask_checkbox')))
        ask.click()
        allow = wait.until(
            EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_allow_button')))
        allow.click()
    except:
        pass


# 允许两项授权
get_permission()
get_permission()

# 点击“立即使用”
welcome = wait.until(EC.presence_of_element_located((By.ID, 'com.gotokeep.keep:id/btn_bottom_in_video_welcome')))
welcome.click()

# 切换“密码登录”(同样可以使用第三方进行授权登录)
driver.tap([(900, 110)])

# 输入“手机号”
phone = driver.find_element_by_accessibility_id('Phone Number In Login')
phone.send_keys('13988888888')  # 替换成实际的账号

# 输入“密码”
password = driver.find_element_by_accessibility_id('Password In Login')
password.send_keys('123456')  # 替换成实际的密码

# 点击“登录”
login = driver.find_element_by_id('com.gotokeep.keep:id/btn_action')
login.click()

最后,附上运行效果图:

效果图

示例源码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android获取其他包的Context实例然后干坏事 博客分类: Android AndroidSecurityOSCC++

          Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、获取...

    chroya
  • Android系统事件的recycle原理 博客分类: Android Android

        最近封装一些功能性的jar包,因为需要产生一些动作,然后给调用者一些回调,所以用到了事件和监听器。     举个例子,比如DragListene...

    chroya
  • ubuntu升级之后启动不了的解决 博客分类: Linux UbuntuLinuxDebianAndroidEclipse

    我的ubuntu是用wubi安装的,今天准备搞android的ndk,所以把开发环境给配置了一下,jdk、android的sdk、ndk,还有eclipse...

    chroya
  • NJU-Class-Shedule ALPHA-RELEASE v0.1.0!

    为NJUer的Android平台 Material design 课程表 基于星星课表(mnnyang/ClassSchedule)之上进行设计与重构

    idealclover
  • 合并apk和odex的方法 博客分类: Android小技巧 AndroidEXT工作

           有时候发现别人手机里有一款 apk 挺好,想弄出来装自己手机上,可是却发现那个 apk 是残缺的,里面没有 classes.dex 文件,却有个跟...

    chroya
  • Gradle Failed to open zip file. 解决方法

    这两天在弄安卓相关,也就免不了与android-studio打交道. 在编译项目的过程中遇到了以下错误:

    idealclover
  • NDK入门、提高和实战 博客分类: Android AndroidLinuxJNIEclipseC#

        网上也有一些对NDK的介绍,不过都是很简单的把sample里面的例子讲解一下,并不深入,我这里把我的所得分享一下。我下载的是Android Native...

    chroya
  • 判断一个activity是否存在于系统中 博客分类: Android小技巧

    已知包名和类名,如何判断这个activity是否在系统中存在呢?很简单,通过intent就行。

    chroya
  • linux下用adb连接手机的问题解决 博客分类: Android LinuxAndroidEclipseBash

      在linux里面,模拟器可以直接识别,使用adb也没有限制,但是手机插上usb之后,adb并不识别,显示的是问号,在eclipse里面也是这样。

    chroya
  • Android中的事件模型 博客分类: Android AndroidQQUIUP

    以前写 android ,对事件的处理没有太深入,只是简单的 onTouchEvent 就 ok 了,现在写的 UI ,很多自定义组件,父 view 和子 vi...

    chroya

扫码关注云+社区

领取腾讯云代金券