热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

appium基本使用(Android)

一.环境搭建详情可见:https:www.cnblogs.comlihongtaoyap16971096.html二.元素定位详情可见:https:www.cnblogs.coml

一.环境搭建

详情可见:https://www.cnblogs.com/lihongtaoya/p/16971096.html


二.元素定位

详情可见:https://www.cnblogs.com/lihongtaoya/p/16988850.html


三.启动app基本配置

1.使用时首先导入webdriver模块

from appium import webdriver

2.通过webdriver调用Remote()完成初始化配置

driver = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired)

其中command_executor参数一般固定为http://127.0.0.1:4723/wd/hub,desired_capabilities则为字典类型的配置。

desired = {
"platformName": "Android", # 手机系统
"platformVersion": "11", # 手机系统版本
"deviceName": '90bf8faf', # 连接的设备(adb devices)
"automationName": "UiAutomator2", # 自动化测试框架 (1.4以上的appium不用写)
"appPackage": "app包名", # app包名
"appActivity": "app启动页名", # app的启动页面
"autoGrantPermissions": "true", # 默认允许app获取相关权限
"noReset": True # 保留登录模式
}

上述参数中是启动app的基本配置,其中app包名和页面名可通过dumpsys window|grep mCu指令来查看。

其它参数配置可参考这位大佬的博客:https://www.cnblogs.com/wysk/p/7346659.html

3.实例

from appium import webdriver
# from selenium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
desired
= {
"platformName": "Android", # 手机系统
"platformVersion": "11", # 手机系统版本
"deviceName": '90bf8faf', # 连接的设备(adb devices)
"automationName": "UiAutomator2", # 自动化测试框架 (1.4以上的appium不用写)
"appPackage": "app包名", # app包名
"appActivity": "app启动页名", # app的启动页面
"autoGrantPermissions": "true", # 默认允许app获取相关权限
"noReset": True # 保留登录模式
}
driver
= webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired)

四.常用方法与属性

1.implicitly_wait():设置隐性等待

driver.implicitly_wait(20) # 设置隐性等待,单位为秒

具体等待用法可见:https://www.cnblogs.com/lihongtaoya/p/16725333.html

2.page_source:打印页面代码

print(driver.page_source) # 打印当前页面代码

使用场景:我们在用uiautomatorviewer工具定位app页面元素时,有的页面(登录页面)禁止截图,

                  无法定位到元素,这时就可以使用page_source来打印页面代码来手动定位

3.install_app("url"):安装app

方法一

driver.install_app(r"C:\Users\username\Desktop.apk") # 安装apk

方法二

os.system(r"adb install C:\Users\username\Desktop.apk")

4.remove_app("包名"):根据包名卸载app

driver.remove_app("包名") # 卸载app,app_id为包名,pm list packages可查看

5.is_app_installed("包名"):根据包名判断当前设备有没有安装app

driver.is_app_installed("tv.danmaku.bili") # 根据包名判断当前是否安装了软件,安装了返回true,否则返回flase

6.click():点击事件

7.send_key():输入

8.clear():清空

9.get_attribute("name") :获取元素值

10.text:获取文本值

11.size:获取元素宽高

12.tag_name:获取tabname属性

13.is_displayed():判断元素是否可见(隐藏返回false,非隐藏返回true)

14.get_attribute("checked") :判断单选框或复选框是否被选中(选中返回true,未选中返回false)

15.is_selected():判断下拉框

16.is_enabled():判断元素是否可点击,可点击返回true,不可点击返回false

17.hide_keyboard():隐藏键盘

driver.hide_keyboard() # 隐藏键盘(前提键盘弹出)

18.start_activity():打开填写的app页

driver.start_activity(app_package="包名", app_activity="页面名") # 打开设置的页面名和包名

19.current_activity:获取当前页面名

driver.current_activity

20.current_package:获取当前包名

driver.current_package

21.切换/查看视窗

# WebView.setWebContentsDebuggingEnabled(true) # 打开开发者模式
print(driver.current_context) # 查看当前所在的视窗
print(driver.contexts) # 查看当前页面有多少视窗,返回数组
print(driver.context) # 查看当前所在的视窗
driver.switch_to.context("context_name") # 切换视窗

1)若要切换到webview视窗内,需要让开发打开开发者模式:WebView.setWebContentsDebuggingEnabled(true)

      才能用driver.contexts查看视窗,然后切换。

2)current_context与context均为查看当前视窗,无区别。

22.scroll(e2, e1):页面滑动

driver.scroll(e2, e1) # 页面滑动,从元素e2滑动到e1(可横向和纵向滑动)

23.drag_and_drop(e1, e2):元素拖拽

driver.drag_and_drop(e1, e2) # 将元素e1拖拽到元素e2

24.tap(positions: List[Tuple[int, int]], duration: Optional[int]):按住某个坐标点

driver.tap([(498, 276), (338, 276)], 3000) # 设置同时按住多个坐标,元组类型的坐标[(),()]。可设置按住时长ms。

25.swipe(start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0):坐标拖拽

driver.swipe(x1,y1,x2,y2,3000) #从(x1,y1)坐标拖拽到(x2,y2)坐标,可设置拖拽时长ms

26.flick(start_x: int, start_y: int, end_x: int, end_y: int):坐标拖拽

driver.flick(x1,y1,x2,y2) # 从(x1,y1)坐标拖拽到(x2,y2)坐标

与swipe()的区别在于不能自定义拖拽时长

27.wait_activity():设置页面等待

driver.wait_activity("页面名", timeout=5, interval=1) # 设置等待页面的出现,timeout为等待时长,interval每间隔多久设别一次(false或true)

28.background_app(ms):设置返回后台运行多少s后再返回app

driver.background_app(5) # 设置返回后台运行多少s,后在返回app

29.shake():摇一摇手机

driver.shake() # 摇一摇手机

30.open_notifications():打开设备通知栏

driver.open_notifications() # 打开设备通知栏

31.toggle_location_services():打开定位设置页

driver.toggle_location_services() # 打开定位设置页

32.location:返回元素坐标

element.location # 返回元素xy坐标
element.location.get('x') # 返回元素x坐标
element.location.get('y') # 返回元素y坐标

33.get_screenshot_as_base64():手机截屏

driver.get_screenshot_as_base64() # 手机截屏

详情可见:https://www.cnblogs.com/lihongtaoya/p/16759942.html

34.execute_script():执行js脚本

driver.execute_script() # 执行js脚本

35.get_window_size():获取当前屏幕的长和宽

driver.get_window_size() # 获取当前屏幕的长和宽

36.quit():关闭页面

driver.quit()

37.press_keycode() :短按键

driver.press_keycode(26) # 26为按键码,按键码详情可见:https://blog.csdn.net/weixin_43004606/article/details/113552686

38.long_press_keycode():长按键码

driver.long_press_keycode(26) # 长按键码

和press_keycode()的区别一个是长按(如长按关机键),一个是短按

39.w3c_actions用法

本来是想介绍MultiAction和TouchAction的使用的,但是两者在appium2.0以后就弃用了,所以本次就只

介绍w3c_actions的用法了。

 使用时应先导入ActionChains模块

om selenium.webdriver import ActionChains

1)click():指定元素左击

action.w3c_actions.pointer_action.click(element) # 指定元素左击

2)context_click():指定元素右击

action.w3c_actions.pointer_action.context_click(element) # 指定元素右击

3)double_click():双击

4)click_and_hold():长按元素

action.w3c_actions.pointer_action.click_and_hold(element) # 设置长按元素

5)pause():设置等待时长

actions.w3c_actions.pointer_action.pause(5) # 当前状态等待5s

6)release():松开

actions.w3c_actions.pointer_action.release() # 松开元素

7)perform():执行鼠标事件

action.perform()

8)move_to_location():鼠标移动到指定坐标

actions.w3c_actions.pointer_action.move_to_location(x=971, y=256).click() # 鼠标移动到指定坐标

9)move_to():鼠标移动到指定元素

actions.w3c_actions.pointer_action.move_to(element=driver.find_element(AppiumBy.XPATH, '//*[@text="取消"]')).click() # 鼠标移动到指定元素上

10)pointer_down():按下

11)pointer_up():松开

实例用法

示例一:设置按下一个元素长按5s后松开

action.w3c_actions.pointer_action.click_and_hold(element) # 设置长按元素
actions.w3c_actions.pointer_action.pause(5) # 当前状态等待5s
actions.w3c_actions.pointer_action.release() # 松开元素
action.perform()

示例二:移动到某个元素上按下再松开

actions.w3c_actions.pointer_action.move_to(element=driver.find_elements(AppiumBy.XPATH, '//*[@resource-id="com.vivo.browser:id/image" and @class="android.widget.ImageView"]')[0]).pointer_down() # 按下
actions.w3c_actions.pointer_action.pointer_up() # 松开

示例三:从一个坐标点滑动到另一个坐标点然后再松开

actions.w3c_actions.pointer_action.move_to_location(x=500, y=1000).pointer_down().move_to_location(x=500,y=500).pointer_up()

40.页面放大和缩小

这里不做过多的介绍了,直接看实例代码

from selenium.webdriver import ActionChains
# 放大
actiOns= ActionChains(driver)
actions.w3c_actions.devices
= [] # 创建多devices集
fin1 = actions.w3c_actions.add_pointer_input('touch', 'fin1') # 添加一个虚拟设备,一个手指
fin2 = actions.w3c_actions.add_pointer_input('touch', 'fin2') # 添加一个虚拟设备,第二个手指
fin1.create_pointer_move(x=500, y=1000) # 手指一移动到某点
fin2.create_pointer_move(x=500, y=1000) # 手指二移动到某点
fin1.create_pointer_down() # 手指一按下
fin2.create_pointer_down() # 手指二按下
fin1.create_pointer_move(x=500, y=500) # 手指一移动
fin2.create_pointer_move(x=500, y=1500) # 手指二移动
fin1.create_pointer_up(0) # 松开手指一释放
fin2.create_pointer_up(0) # 松开手指二释放
actions.perform() # 执行
time.sleep(3)
# 缩小
action = ActionChains(driver)
action.w3c_actions.devices
= []
fin1
= action.w3c_actions.add_pointer_input('touch', 'fin1')
fin2
= action.w3c_actions.add_pointer_input('touch', 'fin2')
fin1.create_pointer_move(x
=500, y=500)
fin2.create_pointer_move(x
=500, y=1500)
fin1.create_pointer_down()
fin2.create_pointer_down()
fin1.create_pointer_move(x
=500, y=1000)
fin2.create_pointer_move(x
=500, y=1000)
fin1.create_pointer_up(0)
fin2.create_pointer_up(0)
action.perform()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文章来源:https://www.cnblogs.com/lihongtaoya/ ,请勿转载

推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
author-avatar
0雕雕_970
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有