基础配置

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('包名')

  • 卸载appdriver.remove_app('包名')

  • 安装appdriver.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相关推荐

  1. APPIUM Android 定位方式

    原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...

  2. appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...

    info:[debug]将命令推送到appium工作队列:["element:getSize",{"elementId":"2"}] inf ...

  3. 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 ...

  4. Win + Appium + Android/IOS + Python环境搭建

    说明:此文章仅为自己学习时记录,比较乱,不推荐读者查阅.  IOS自动化测试: 注意:WebDriverAgent最好下载appium的(而不是facebook下的):GitHub - appium/ ...

  5. Appium Android Bootstrap源码分析之简介

    在上一个系列中我们分析了UiAutomator的核心源码,对UiAutomator是怎么运行的原理有了根本的了解.今天我们会开始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium ...

  6. appium android mac,Mac上安装Appium详细步骤

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接. 一.appium配置 1 . AppStore下载Xcode直接安装即可: 2 .下载Android SDK,测试Android ...

  7. appium android数字字母切换键,Appium 输入法切换

    问题背景 在使用appium进行自动化测试时,手机突然崩溃重启,然而重启需要使用键盘解锁,在使用appium自动化测试时已经将输入法切换至appium自带的输入法且默认隐藏,那么应该怎么调出输入法解锁 ...

  8. appium android函数,Appium(一):appium环境以及基础函数的封装

    一:搭建appium环境 1.JDK和Android SDK配置 2.安装Node.js 3.安装.net framework 4.安装Appium 5.安装appium - python - cli ...

  9. Mac M1 appium Android iOS 启动真机调试

    前言:继 Mac M1 appium环境搭建成功之后,又要开始真机调试的环节啦,还没搭好环境的小伙伴戳   Mac M1 平台搭建 appium 环境_抓到一只测试小白的博客-CSDN博客,接下来要开 ...

最新文章

  1. 最佳DevOps工具获奖者:CloudBees Jenkins平台
  2. golang异步协程调度原理
  3. 设计模式复习-组合模式
  4. iOS核心动画学习整理
  5. git 连接gitee时报错 Auth error: Access deined: authorize failure
  6. 微博超话签到小工具v2.0 签到管理操作
  7. 百度AI 17篇 CVPR 2019 论文介绍(附下载)
  8. 如何监控oracle的索引是否使用
  9. SQL-24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'...
  10. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
  11. 专注技术,回归本质,这就是太平洋未来科技的创新之处...
  12. 解决PlayerSettings中的splash Image资源发现在内存中卸载不掉
  13. dwg android软件,CAD迷你看图软件手机版
  14. unity 视频播放器没有声音
  15. scrapy+python爬地图参照物应该有的坑及解决办法
  16. oracle如何导入用户数据文件,oracle的dmp数据文件的导出和导入以及创建用户
  17. 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表
  18. CentOS 8配置静态IP地址
  19. java 16进制与汉字_汉字转16进制方法
  20. adb shell 连接两个相同设备

热门文章

  1. Flutter 汉字标点符号(逗号、顿号等)底部没对齐的问题处理
  2. nginxssl证书配置
  3. win10远程计算机或设备将不接受连接
  4. php windows vld,PHP安装VLD查看opcode
  5. TCL集团2018年净利润达34.7亿元 同比增长30.2%
  6. 网龙《DJ版设计方法论微课》笔记
  7. 实战:批量重启物理机或批量从pxe启动-ipmi命令(测试成功-工作实战)-2021.11.16
  8. Flask Web开发:基于Python的Web应用开发实战
  9. Obsidian:实现日记记录【设计并使用模板】
  10. PLSQL如何查看建表语句