像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()
最后,附上执行效果图:






























