整理文档不易,未经授权,禁止转载.
本章内容纯入门,深入学习请拜读 官方 Appium Api
Appium(GitHub)是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试 – 百度百科
画了一个简单的UML,个人理解,仅限参考,非官方
正确的选择工具可以让我们学习更有效率
网上的流程图我就不粘贴了,还是文字描述可能会简单一点,至少我这么觉得.
IDEA
,Android Studio
开发工具,但这个工具在网上我能找到很多Appium相关的问题解决.Android adb
命令的形式去操作(Andriod:手机/虚拟机), 注意还有个Appium命令版的,通过Node.JS(Npm)
安装的,出现( A session is either terminated or not started
)问题找了许久都没相关解决,安装桌面版的一切正常调试桥 (adb)
是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限, 在Android SDK 平台工具软件包中,在*/android_sdk/platform-tools/adb.exe
Appium入门工具包集合(百度云)下载,全都在里面了
提取码:5m5y
安卓模拟器:市面很多虚拟机工具都可以,不一定用sdk中的安装,比如国产雷电,逍遥,夜神,比较推荐Genymotion(个人版免费)
安卓真机:Usb连接笔记本,启动开发者模式
ps:其他手机不知道有没有,三星s8+是要选择这个
下面讲安卓模拟器安装的方式
请牢记这个很常用的命令
#启动adb服务
adb start-server
#查看设备(当前无设备)
adb devices
这里我们安装了一个 Android8.1 64位 x86架构 的手机镜像,文件有点大,建议只选装一个版本
此处需要注册一个个人账号,比较麻烦,但是这个模拟器用法比sdk安装简单很多
{
"platformName": "Android",
"platformVersion": "8.0.0",
"deviceName": "192.168.12.101:5555",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator",
"noReset": true,
"newCommandTimeout": "9000"
}
参数 :appPackage appActivity
adb shell
logcat | grep ActivityManage
参数 :appPackage appActivity
adb shell
logcat | grep ActivityManage
打开App工程日志,这里提取的值,用于程序中的appPackage和appActivity
查看我的按钮xPath元素位置,复制出来,代码中的xpath,id取值类似,不一一列举
我们又点击了我的按钮,得到了一个新的Activity , 说明不同的页面可能有不同的Activity,我们可以用他在程序中做一个控制,比如等待这个Activity加载出来我们再执行下一个动作
输入的假是假账号,登陆失败是当然的
这是一段不健全的代码,可能某个页面延迟了也许就出现了异常.
from time import sleep
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "8.0.0"
caps["deviceName"] = "192.168.12.101:5555"
caps["appPackage"] = "com.jifen.qukan"
caps["appActivity"] = "com.jifen.qkbase.main.MainActivity"
caps["noReset"] = True
caps["newCommandTimeout"] = "9000"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
## 显示等待5秒
sleep(5)
## 我的按钮xPath
myButonXpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout[5]/android.widget.LinearLayout/android.widget.TextView'
## 点击我的按钮
driver.find_element_by_xpath(myButonXpath).click()
# 这里写入点击我的后登陆页的Activity最大等待10秒
loginActivity = '.login.V2MainLoginActivity'
## 有这个Activity,那么开始进入登陆操作
if driver.wait_activity(loginActivity, 10) :
nameInputId='com.jifen.qukan:id/bo6' ## ID方式获取用户名框
passwordInputId='com.jifen.qukan:id/bo7' ## ID方式获取密码
loginButonId='com.jifen.qukan:id/i1' ## ID方式获取登陆按钮
driver.find_element_by_id('com.jifen.qukan:id/br1').click() ## ID方式获取密码类型登陆
sleep(2) ## 点击密码类型登陆,等待用户密码框加载,显示等待2秒
driver.find_element_by_id(nameInputId).send_keys('18888888888') ## 键入用户名
driver.find_element_by_id(passwordInputId).send_keys('88888888') ## 键入密码
driver.find_element_by_id(loginButonId).click() ## 触发登陆点击
sleep(2) ## 点击登陆后,显示等待2秒
driver.quit()
异常:
Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME or ANDROID_SDK_ROOT environment variables to the corect Android SDK root directory path.
解决: 未配置/错误配置 ANDROID_HOME ,配置 ANDROID_HOME 即可
异常
An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.
解决: 未找到虚拟机或者是真机
1 . 请检查USB线
2. adb kill-server 再 adb start-server 重启adb服务(前提是配置了adb.exe(环境变量))
异常
An element could not be located on the page using the given search parameters
解决:try + except 做异常处理,或设置合理的延迟
1 . 元素因为网络或是反应慢,没有加载出来,设置合理的延迟或者控制
2. 在滑动页面时,页面出现了一半,另一半没有加载出来,获取失败.
异常
电脑下载的apk安装包,通过adb install **.apk 安装后,软件无法联网,可以通过应用市场来安装工具