APP下载

APP 自动化:Appium 极简上手

消息来源:baojiabao.com 作者: 发布时间:2026-05-21

报价宝综合消息APP 自动化:Appium 极简上手

像Selenium可以操控Web浏览器,手机APP平台也有类似的自动化测试工具:Appium;

全文分基础介绍、环境搭建和案例演示三部分介绍Appium,以帮助Learner快速的上手。

基础介绍

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

Appium执行流程、原理

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

环境搭建

NodeJSAppium是使用nodejs实现的,因此Node是直译器,首先要确认安装好

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

Andrioid SDKandroid sdkandroid studio上述方式可以直接和间接搭建安装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)。

获取装置名称。操作流程:开启手机的开发和除错模式,连线电脑授权认证,Window + R输入并执行cmd,用adb devices -l检视:

获取装置号

启动Appium Server进行除错:

Inspector Session

Desired Capabilities

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

platformName,如Android、iOS等deviceName,参考前面是如何获取的appPackage和appActivity,获取参考这里综上所述,这里对应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()

最后,附上执行效果图:

2019-12-24 14:51:00

相关文章