appium+android
基础配置
from appium import webdriver
# 定义字典变量
desired_caps = {}
# 必须参数,定义被测脚本的平台属性。不区分大小写,如android、IOS.
desired_caps['platformName'] = 'Android'
# 必须参数,定义被测手机的版本号(设置->关于本机->android版本, 必须跟被测机对得上。不能乱写,大版本不能错。小版本可以不用写)
desired_caps['platformVersion'] = '6.0.1'
# 被测机名字,可以写任意值,但不能为空
desired_caps['deviceName'] = '127.0.0.1:7555'
# 必须参数,指定被测软件的包名(apk名称)
desired_caps['appPackage'] = 'com.android.settings'
# 必须参数,指定要打开的app的页面是那个
desired_caps["appActivity"] = '.Settings'
# 不是必须的的,但一般需要指定(自动化测试的引擎)
desired_caps['automationName'] = 'Uiautomator2'
# app重置策略-True不要停止应用程序,不要清除应用数据,不要卸载
desired_caps['noReset'] = True
# 设置命令的操作时间
desired_caps['newCommandTimeout'] = 6000
# 用于设置中文输入
# 使用Unicode输入法
desired_caps['unicodeKeyboard'] = True
# 重置输入法到原有状态
desired_caps['resetKeyboard'] = True
查看apk包名和activity:
在没有apk包的情况下,直接运行adb命令查看(要运行相应的activity)
adb shell dumpsys activity activities | findstr Run
APP重置策略:
默认:测试后停止并清除应用数据,不卸载APK
fullReset:在会话开始前 测试后 停止APP,清除app数据并卸载APK
noReset:不要停止应用程序,不要清除应用数据,不要卸载
newCommandTimeout:
为了结束Appium会话,会设置一个等待从客户端发送命令的超时时间,默认为60秒,一般不需要设置
unicodeKeyboard:
是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true
newCommandTimeout:
为了结束Appium会话,会设置一个等待从客户端发送命令的超时时间,默认为60秒,一般不需要设置是否将键盘重置为初始状态,设置了unicodeKeyboard时,在测试完成后,设置为true,将键盘重置
获取driver
# 获取driver(对应appium服务器ip地址和设置的端口号)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# wd:可以理解是WebDriver的缩写
# hub:是指主节点、中心节点
运行
1、启动模拟器
2、启动adb服务
3、adb连接模拟器
4、启动appium工具
5、运行脚本
方法
当前所在应用包名
driver.current_package
当前所在应用启动名
driver.current_activity
启动xxx(可应用于跳转)
driver.start_activity('包名','启动名')
退出驱动
driver.quit()
退出当前应用driver.close_app()
退出指定应用
driver.terminate_app('包名')
启动当前应用driver.launch_app()
判断app是否存在
driver.is_app_installed('包名')
卸载app
driver.remove_app('包名')
安装app
driver.install_app('安装包路径apk')
app置于后台(超过既定时间之后会重新置于前台)
driver.background_app(时间秒)
元素定位
可使用uiautomatorviewer配合定位
定位单个元素(如果是定位到多个则为第一个)
- ID定位
driver.find_element_by_id(resource-id属性值)
- class定位
driver.find_element_by_class_name(class属性值)
- xpath定位
driver.find_element_by_xpath(xpath表达式)
- name定位
driver.find_element_by_accessibility_id(content-desc属性值)
定位一组元素(返回数据为列表)
- ID定位
driver.find_elements_by_id(resource-id属性值)
- class定位
driver.find_elements_by_class_name(class属性值)
- xpath定位
driver.find_elements_by_xpath(xpath表达式)
- name定位
driver.find_elements_by_accessibility_id(content-desc属性值)
xpath的写法
示例:
- 文本包含“设”字
//*[contains(@text,'设')]
- class属性为aa
//*[@class='aa']
元素操作及获取信息
点击
element.click()
输入
element.send_keys(value)
清除文本
element.clear()
获取元素文本
element.text
获取元素位置
element.location
返回值为{'x': n, 'y': n}
获取元素大小
element.size
返回值为{'height': n, 'width': n}
获取属性值
element.get_attribute(属性名)
print('content-desc为',element.get_attribute('name')) print('text为',element.get_attribute('text')) print('enabled为',element.get_attribute('enabled')) print('resource-id为',element.get_attribute('resourceId')) print('class为',element.get_attribute('className'))
滑动
swipe(从一个坐标位置滑动到另外一个坐标位置,精准滑动)drive.swipe(start_x, start_y, end_x, end_y, duration)#start_x: 滑动开始x坐标#start_y: 滑动开始y坐标#end_x: 滑动结束x坐标#end_y: 滑动结束y坐标#duration:滑动持续时间,单位:ms
滚动
scroll(有惯性存在,滚动时不按下开始元素)#在duration时间将el1滚动到el2位置上 driver.scroll(el1,el2,duration)
拖拽
drag_and_drop(精准操作,无惯性存在,按下开始元素拖拽到指定元素–从一个元素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置)# 将元素el1拖拽至el2位置 drag_and_drop(el1,el2)
手势操作
- 轻敲(模拟手指对某个元素或坐标按下并快速抬起)
TouchAction(driver).tap(el,x,y).perform()
#导包 from appium.webdriver.common.touch_action import TouchAction # 轻敲WLAN # 1、获取元素 el = driver.find_element_by_xpath('//*[@text="WLAN"]') # 2、创建对象 touch_action = TouchAction(driver) # 3、调用轻敲方法:可使用元素也可使用xy坐标位置 touch_action.tap(el) # 4、执行手势 touch_action.perform() # # 2、3、4、可合并为 # TouchAction(driver).tap(el).perform()
- 按下
press(el,x,y)
抬起release()
#按下抬起,效果类似于点击 TouchAction(driver).press(el).release().perform() #或者,获取位置,使用xy坐标方式 location = el.location TouchAction(driver).press(x=location.get('x'),y=location.get('y')).release().perform()
- 长按
TouchAction(driver).tap(el,x,y,duration).perform()
#长按el元素两秒 TouchAction(driver).long_press(el,2000).perform()
- 移动
move_to(el,x,y)
和等待wait(n)
# 绘制解锁图案Z# 1、定位WLAN和应用 WLAN = driver.find_element_by_xpath('//*[@text="WLAN"]') app = driver.find_element_by_xpath('//*[@text="应用"]') # 2、将应用拖拽至WLAN位置 driver.drag_and_drop(app,WLAN) # 3、点击安全 driver.find_element_by_xpath('//*[@text="安全"]').click() # 4、点击屏幕锁定方式 driver.find_element_by_xpath('//*[@text="屏幕锁定方式"]').click() # 5、点击图案 driver.find_element_by_xpath('//*[@text="图案"]').click() # 6、绘制Z # 坐标点 # 134,508 675,508 # 134,1050 675,1050 # move_to 移动,wait等待 TouchAction(driver).press(x=134,y=508).wait(1000).move_to(x=675,y=508).wait(1000).move_to(x=134,y=1050).wait(1000).move_to(x=675,y=1050).wait(1000).perform()
手机操作
获取手机分辨率
driver.get_window_size()
查看当前网络
driver.network_connection
设置网络
driver.set_network_connection(1)
截图保存
driver.get_screenshot_as_file('文件名')
按键
driver.press_keycode(keycode)
键名 描述 键值 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK 返回键 4 KEYCODE_SEARCH 搜索键 84 KEYCODE_CAMERA 拍照键 27 KEYCODE_FOCUS 拍照对焦键 80 KEYCODE_POWER 电源键 26 KEYCODE_NOTIFICATION 通知键 83 KEYCODE_MUTE 话筒静音键 91 KEYCODE_VOLUME_MUTE 扬声器静音键 164 KEYCODE_VOLUME_UP 音量增加键 24 KEYCODE_VOLUME_DOWN 音量减小键 25
参考:【Appium】手机按键(比如返回键、Home键等)的数字代号总结
- 操作通知栏
# 打开通知栏 driver.open_notifications() sleep(2) # 查找信息并点击 driver.find_element_by_xpath('//*[@text="例子"]').click()
- 获取toast信息
toast为移动应用中有时间显示的黑底白字的提示 1、需要设置引擎 desired_caps['automationName'] = 'Uiautomator2'2、编码获取文本值,eg: # 方法一:文本定位,不灵活 toast_msg = driver.find_element_by_xpath('//*[contains(@text,"登录需要同意")]').text print(toast_msg)# 方法二,直接获取toast的内容,需提前导包 from selenium.webdriver.support.ui import WebDriverWait toast_msg = WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath("//*[@class='android.widget.Toast']")).text print(toast_msg)
- 切换环境
当app中嵌套web信息是,需要先进行切换才能够定位# 获取当前应用的所有环境 driver.contexts # 切换环境 driver.switch_to.context('WEBVIEW_com.android.browser')
appium+android相关推荐
- APPIUM Android 定位方式
原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...
- appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...
info:[debug]将命令推送到appium工作队列:["element:getSize",{"elementId":"2"}] inf ...
- Appium appium android 6.0+ 微信 @driver.available_contexts 返回 webview_undefined 问题
环境:Android 6.0.1+appium 1.4.16.1 在上面环境中执行微信公众号中的H5测试,发现driver.available_contexts 有时候返回:webview_undef ...
- Win + Appium + Android/IOS + Python环境搭建
说明:此文章仅为自己学习时记录,比较乱,不推荐读者查阅. IOS自动化测试: 注意:WebDriverAgent最好下载appium的(而不是facebook下的):GitHub - appium/ ...
- Appium Android Bootstrap源码分析之简介
在上一个系列中我们分析了UiAutomator的核心源码,对UiAutomator是怎么运行的原理有了根本的了解.今天我们会开始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium ...
- appium android mac,Mac上安装Appium详细步骤
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接. 一.appium配置 1 . AppStore下载Xcode直接安装即可: 2 .下载Android SDK,测试Android ...
- appium android数字字母切换键,Appium 输入法切换
问题背景 在使用appium进行自动化测试时,手机突然崩溃重启,然而重启需要使用键盘解锁,在使用appium自动化测试时已经将输入法切换至appium自带的输入法且默认隐藏,那么应该怎么调出输入法解锁 ...
- appium android函数,Appium(一):appium环境以及基础函数的封装
一:搭建appium环境 1.JDK和Android SDK配置 2.安装Node.js 3.安装.net framework 4.安装Appium 5.安装appium - python - cli ...
- Mac M1 appium Android iOS 启动真机调试
前言:继 Mac M1 appium环境搭建成功之后,又要开始真机调试的环节啦,还没搭好环境的小伙伴戳 Mac M1 平台搭建 appium 环境_抓到一只测试小白的博客-CSDN博客,接下来要开 ...
最新文章
- 最佳DevOps工具获奖者:CloudBees Jenkins平台
- golang异步协程调度原理
- 设计模式复习-组合模式
- iOS核心动画学习整理
- git 连接gitee时报错 Auth error: Access deined: authorize failure
- 微博超话签到小工具v2.0 签到管理操作
- 百度AI 17篇 CVPR 2019 论文介绍(附下载)
- 如何监控oracle的索引是否使用
- SQL-24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'...
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
- 专注技术,回归本质,这就是太平洋未来科技的创新之处...
- 解决PlayerSettings中的splash Image资源发现在内存中卸载不掉
- dwg android软件,CAD迷你看图软件手机版
- unity 视频播放器没有声音
- scrapy+python爬地图参照物应该有的坑及解决办法
- oracle如何导入用户数据文件,oracle的dmp数据文件的导出和导入以及创建用户
- 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表
- CentOS 8配置静态IP地址
- java 16进制与汉字_汉字转16进制方法
- adb shell 连接两个相同设备
热门文章
- Flutter 汉字标点符号(逗号、顿号等)底部没对齐的问题处理
- nginxssl证书配置
- win10远程计算机或设备将不接受连接
- php windows vld,PHP安装VLD查看opcode
- TCL集团2018年净利润达34.7亿元 同比增长30.2%
- 网龙《DJ版设计方法论微课》笔记
- 实战:批量重启物理机或批量从pxe启动-ipmi命令(测试成功-工作实战)-2021.11.16
- Flask Web开发:基于Python的Web应用开发实战
- Obsidian:实现日记记录【设计并使用模板】
- PLSQL如何查看建表语句