一、环境搭建,并验证环境是否搭建成功
Python基础环境搭建【安装Python、安装Pycharm】
装配SDK【安装JDK、配置SDK】
Appium安装【node安装(appium使用node语言开发的)、appium安装(server)、Appium-Python-Client安装及配置】
以上安装完成需要配置环境变量
安装模拟器或者使用真机
使用真机是需要安装:uiautomator2.server、uiautomator2.server.test、Appium Setting、Unlock
二、代码操作app流程
1)导入包:import appium.webdriver.webdriver from WebDriver
2)收集参数:
caps={}
caps['automationName']='UiAutomator2'
caps['platformName']='Android'
caps['platformVersion']='6.0.0'
caps['deviceName']='192.178.119.112:5555'
caps['appPackage']='com.youdao.note'
caps['appActivity']='.activity2.MainActivity t225'
说明:
automationName:测试框架名称,一般为UiAutomator2
platformName :操作系统名称(Android、iOS、FirefoxOS)
platformVersion:操作系统版本(adb shell getprop ro.build.version.release)
deviceName:被测设备名,启动并连接设备/App(先打开app才能获取app信息)后通过adb devices获取
appPackage:包名,被测app或者系统主界面。使用uiautomatorviewer.bat工具(SDK解压路径->tools->运行uiautomatorview.bat)获取被测软件包名,真机可以在应用软件详情页面获取
appActivity:cmd运行"adb shell dumpsys activity activities | findstr mFocusedActivity"获取,获取的是当前捕获页面的activity。例:捕获主界面获得主界面activity,捕获app页面获得app的activity。
3)设置驱动
driver= Webdriver("http://127.0.0.1:4723/wd/hub",caps)
说明:appium服务器搭建在本地都是这个地址,caps是上面收集的参数
4)定位并操作
<1>定位信息获取:先打开被测app,启动uiautomatorviewer工具(SDK解压路径-》tools-》运行uiautomatorview.bat),点击左上角第二个按钮捕获被测页面信息,点击要操作控件右侧显示。开启appium服务器会导致uiautomatorviewer无法捕获被测页面信息。
<2>app安装与删除:
说明:caps中appPackage,appActivity设置主界面信息,
安装:driver.install_app("D:\\app_automation\youdaoyunbiji_84.apk") #参数为包的绝对路径
卸载:driver.remove_app("com.youdao.note") #参数为包名
app状态检查:driver.is_app_installed("com.youdao.note") #参数为包名
<3>弹出框处理
def always_allow(self,driver):
yes_button = (By.ID,'com.android.packageinstaller:id/permission_allow_button')
try:
e=WebDriverWait(driver,3).until(EC.presence_of_element_located(yes_button))
e.click()
except:
pass
<4> 屏幕截取
screenshotname='searchnote'+title+'.png'
driver.get_screenshot_as_file(screenshotname)
<5>滑动:
1>driver.swipe(start_x,start_y,end_x,end_y,duration)
参数:
start_x:起始时横坐标
start_y:起始时纵坐标
end_x:结束时横坐标
end_y:结束时纵坐标
duration:滑动持续时间,单位毫秒,默认None(一般设置500-1000毫秒比较合适)
说明:手机页面坐标从左上角(0,0)开始,右下角结束(x和y坐标最大),屏幕内容从上向下滑动展示时,手的操作其实是从当前屏幕的下方往上方滑动的,”下方“的y坐标(即开始y坐标)大于上方y坐标(即结束的y坐标)。
2>由于不同手机屏幕尺寸不同,一般不使用固定坐标
# 屏幕宽
width = driver.get_window_size()['width']
# 屏幕高
height = driver.get_window_size()['heigth']
# 屏幕从下向上滑动
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
# 屏幕从上向下滑动
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
# 屏幕从左向右滑动
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
# 屏幕从右向左滑动
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
注意:屏幕内容从上向下滑动展示时,手的操作其实是从当前屏幕的下方往上方滑动的
<6>H5页面与手机app页面切换
前提:需要确认a模拟器/真机使用浏览器内置版本,下载对应驱动(不存在对应版本,下载临近版本试试)放入appium对应的浏览器目录下。
例如谷歌:找到Appium 快捷方式,右键打开文件所在位置,放在如右路径下\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
1>获取页面所有的上下文:cons = self.driver.contexts
说明:返回结果为list,例如['NATIVE_APP', 'WEBVIEW_com.youdao.note'],其中 'NATIVE_APP' 指的是有道云app的标签,'WEBVIEW_com.youdao.note' 指的是H5页面的标签。
2>切换到H5页面:driver.switch_to.context(cons[1])
说明:切换到H5页面后即可正常定位操作。
3>返回app页面操作
点击退回键:driver.press_keycode('4') # 手机按键对应数值:https://blog.youkuaiyun.com/ezreal_tao/article/details/91355892
切换回手机app模式:driver.switch_to.context(cons[0])
4>确认app中的H5页面
(1)使用appium的检查器对source中class进行查看,是否为 "android.webkit.WebView"
(2)凭经验的话页面上方有关闭按钮等
5>内置浏览器版本确认:
1.然后app已经点击按钮,进入H5页面,等待H5页面加载完成。
2.chrome浏览器地址栏中输入chrome://inspect/#devices
3.等待一会(不会立马出现)出现Remote Target下面获取
<7>长按
from appium.webdriver.common.touch_action import TouchAction # 导入包
element=driver.find_element_by_id("*") # 定位需要长按的元素
TouchAction(driver).long_press(element).perform().wait(3000) # 通过long_press方法实现长按操作,wait(3000)是等待3000ms
driver.find_element_by_id("*").click() # 再次点击停止长按
5)启动appium服务器
“主机”和“端口”不用改,按照默认就行,点击启动服务器
运行代码:
说明:caps中appPackage,appActivity决定要操作对象,设置主界面信息运行到driver= Webdriver("http://127.0.0.1:4723/wd/hub",caps)时停留在主界面,设置app信息则会打开app,进入到app首页,后面直接定位操作了。