【移动端UI自动化】Appium学习笔记
基础知识
接口自动化测的是服务器,和手机还是PC没关系的
应用类型有: Native ,Hybrid, 移动网页应用(如ios的浏览器,chrome浏览器)
Appium类似于Selenium,Appium是可以跨平台的,而且支持语言多
adb是Android Debug Bridge,是一个调试工具。
包名。Package(不一定和APP名一致)
界面名(启动名)。Activity。一个界面名对应一个界面
adb原理如下
环境和工具
先去配环境。你需要:
java环境。最好配好PATH。最后命令行输入java有响应就行
android-sdk环境。最好配好PATH。最后命令行输入adb有响应就行.
android模拟器下载。我这里下载的是BlueStacks国际版
下载Appium-Desktop客户端(Client)紫色圆圈.在应用内配置环境变量 ANDROID_HOME
和 ANDROID_SDK_ROOT
.我选择的是simple模式进入应用。进入后点击放大镜,把Capabilities的一些键值对填好后,进入session,会进入Inspector Session,很方便获取元素的特征信息
下载Python模块,pip install Appium-Python-Client
\android-sdk\tools\bin\uiautomatorviewer.bat 自带的实用工具,用来获取元素的特征信息,方便进行元素定位
常用adb命令
以下都是windows命令行命令,常用adb命令速查,看这个也行
获取当前所在的包名和启动名
# 获取当前所在的包名和启动名
adb shell dumpsys window windows | grep mFocusedApp
获得包名和界面名。举例:
包名为: com.bluestacks.settings
界面名为: .SettingsActivity
获取app启动时间
# 获取app启动时间,举例
adb shell am start -W tv.danmaku.bili/.MainActivityV2
# 可能会报java.lang.SecurityException: Permission Denial: starting Intent
Appinum+Python进行测试脚本编写
开模拟器,开Appium-Desktop
运行py脚本
uiautomatorviewer.bat可以帮助定位元素
"""
原理:
python进程会访问本机的appium服务器,获取driver对象
appium会将我们的driver对象调用的方法转化成POST请求,提交给appium服务器
appium将接收到的POST请求发送给手机,再由手机进行执行
"""
from appium.webdriver.common.touch_action import TouchAction
from appium import webdriver
import time
desired_caps = dict()
#平台名字,大小写不敏感
desired_caps['platformName'] = 'Android'
#系统版本
desired_caps['platformVersion'] = '7.1.2' #写7也行
#设备名字,ios很在意,android随便写用不到
desired_caps['deviceName'] = '192.168....'
#要打开的app包名
desired_caps['appPackage'] = 'com.bluestacks.settings'
#要打开的界面名
desired_caps['appActivity'] = '.SettingsActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.start_activity('com.android.chrome', 'org.chromium.chrome.browser.ChromeTabbedActivity') #跳转其他的app
url_bar=driver.find_element_by_id('com.android.chrome:id/url_bar')
url_bar.click()
url_bar.send_keys("cnblogs.com/yhm138")
driver.press_keycode(66) #按回车键
time.sleep(2)
# 滑动
# 从一个坐标滑动到另一个坐标
# driver.swipe()
# 从一个元素滑动到另一个元素,直到页面自动停止
# driver.scroll()
# 从一个元素滑动到另一个元素,在屏幕中的位置替换了
# driver.drag_and_drop()
# 移动
# TouchAction(driver).press(x=244,y=856).move_to(x=1,y=1).release().perform()
# 长按
# TouchAction(driver).long_press(x=1500,y=21).move_to(x=1500,y=839).release().perform()
# TouchAction(driver).long_press(x=1500,y=839).move_to(x=1500,y=21).release().perform()
# 获取屏幕分辨率
# print(driver.get_window_size())
# 获取屏幕截图
# driver.get_screenshot_as_file('ScreenShot’+‘.png')
# 打开通知栏以及按返回键
# driver.open_notifications()
# driver.press_keycode(4)
# 获取app的包名和界面名
# driver.current_package,driver.current_activity
# 放置后台3秒后再回到前台,driver对象还在
# driver.background_app(3)
# 获取和设置网络
# print(driver.network_connection)
# driver.set_network_connection(4) #4==data only
# print(driver.network_connection)
driver.quit()
参考
Appium官网文档
python版本,黑马程序员零基础入门移动自动化测试——Appium框架
java版本,软件测试之Appium自动化测试