appium基础一:连接手机和appium-desktop定位元素
一、获取手机信息
adb devices获取手机或模拟器的设备名
aapt dump badging xxxx.apk获取app的包名、入口等基本信息
如果想要知道手机原生携带的app的基本信息,首先是无法获取到这个apk软件包,也就无法用aapt的方法来获取对应的信息。此时可以通过抓取日志的方法获取基本信息。
举例:想要获取到手机功能---设置 的基本信息。最终可以通过代码或appium客户端链接手机,并自动启动手机的设置功能
方法:
1、关闭手机后台运行的所有程序
2、打开手机日志
在cmd窗口输入adb logcat | findstr /i start 查看日志并过滤出来start 类型日志,保持日志监控窗口不动
3、点击手机中的---设置,查看cmd窗口日志文件
因为先前已经把所有后台运行日志关闭。所有此时打开设置,可以看到日志窗口发生了变化,可以确定这个日至就是设置功能的日志
从上面的日志信息中,可以看到有这样以穿字符串:com.android.settings/.Settings
这个字符串中的 / 左侧即为包名,右侧是入口。然后可以把这个包名和程序入口,替换我们代码中的对应qq的包名和程序入口。替换完成以后,运行程序,就会发现设置自动被启动了
二、通过代码链接模拟器/手机

from appium import webdriver#导入appium包 #连接手机app初始化的一些信息
desc={} desc['deviceName']='127.0.0.1:62001'#手机设备名称,adb devices
desc['platformVersion']='4.4.2'#手机版本,在手机中:设置--关于手机
desc['platformName']='Android' #手机类型,ios或android
#输入命令,获取app信息:aapt dump badging C:\Users\83473\Desktop\mobileqq_android.apk
desc['appPackage']='com.tencent.mobileqq'#包名
desc['appActivity']='com.tencent.mobileqq.activity.SplashActivity'#启动入口
desc["unicodeKeyboard"] = "True"#appium提供的一种输入法,可以传中文。测试时直接用这个输入法
desc["resetKeyboard"] = "True"#程序结束时重置原来的输入法
desc["noReset"] = "True"#不初始化手机app信息(类似不清楚缓存) #启动服务端,再cmd窗口输入appium.如果appium没有安装好,可以打开appium-desktop.也相当于启动了服务 driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desc)#访问服务接口,并启动手机app。url参数是当appium启动后,默认访问服务地址和接口

启动服务如下图:
至此,可以直接右键运行程序,可以看到模拟器中的qq就启动了
三、用客户端链接app
1、双击上面的图标,打开appium-desktop,点击start session
2、打开后,点击屏幕右上角的搜索按钮
3、然后会打开配置页面,在本地服务配置信息同上面写的代码链接配置。填入正确的信息后,点击startSession
成功启动模拟器中的qq程序。如下图。此时如果模拟器和appium-desktop中界面不同,可点击刷新按钮同步下。
四、定位方式
1、id定位
举例:
点击定位元素按钮,点击左侧app界面中的登录定位元素后,就会出现selected element界面。
此时,右侧栏中可以看到,有个id,下拉滚动条会发现还有个resource-id。会发现他们两个是一样的。这就是说明,这个id是唯一的,登录按钮被唯一定位到,代码中就可以通过id直接定位===》find_element_by_id('com.tencent.mobileqq:id/btn_login') #通过id定位
如果右侧栏中只有resource-id,没有id,说明resource-id不是唯一的,也就是不能通过id定位方式定位元素.
id一定要用双引号括起来
2、xpath定位
用定位元素按钮定位某个元素后,右侧selected element栏目中找到xpath,复制其对应的内容。通过xpath方法就可以定位
driver.find_element_by_xpath('//android.widget.EditText[@content-desc="请输入QQ号码或手机或邮箱"]')
3、残障人士提示信息进行定位,也就是content-desc:
先用定位元素按钮定位某个元素后,右侧selected element栏目中,找到content-desc。复制content-desc的值后。通过find_element_by_accessibility_id(),将对应的值作为参数传入。
driver.find_element_by_accessibility_id('请输入QQ号码或手机或邮箱')
4、AndroidUiautomator定位
这个在运行时,调用的是Android自带的UI框架UiAutomator的Api。格式固定,介绍几个常用的格式如下

driver.find_element_by_android_uiautomator('new UiSelector().text("手机号")')
# 包含text文字
driver.find_element_by_android_uiautomator('new UiSelector().textContains("机")')
# 以text什么开始
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("手")')
# 正则匹配text
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^手.*")') # className
driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
# classNameMatches
driver.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")') # resource-id、resourceIdMatches
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.syqy.wecash:id/et_content")') # description
driver.find_element_by_android_uiautomator('new UiSelector().description("S 日历")')
# descriptionStartsWith
driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("日历")')
# descriptionMatches
driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*历$")')

五、通过不同的定位方式查找元素
我们也可以通过appium-desktop的search for element功能。通过定位方式和对应的值来查找元素,从而验证定位方式和值的正确性
可以看到定位方式就是我们第4借说的集中定位方式。选择一个定位方式,填入对应的值,点击search
选中找到的元素,可以看到左侧对应手机界面中的元素被选中。从而也证明我们的这种定位方式和对应的值都是没问题的。可以定位到元素的。
如果是按钮,就点击 tap element ,相当于代码中的click()
如果是输入框,就在‘enter keys' 中输入内容,然后点击sendkeys就可以往已选的元素中输入内容,相当于代码中的send_keys()
六、录制
点击小眼睛图标的录制按钮,可以看到界面展现出来代码模块。可以选择录制语言=》python或其他
然后和右侧selected element 栏目中的tap、send keys、clear 或者 search for element结合操作,根据search for element找到元素定位i,并tap或者sendkeys等操作。这些操作都会被录制下来并生成python代码。可直接使用
appium基础一:连接手机和appium-desktop定位元素的更多相关文章
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- Appium初始化设置:手写代码连接手机、appium-desktop连接手机
一.包名获取的三种方式 1)找开发要2)mac使用命令:adb logcat | grep START win使用命令:adb logcat | findstr START 或者可以尝试使用第3条命令 ...
- appium使用教程(二)-------------连接手机
1. 安装驱动 说明:如果驱动装不上,可以使用第三方的工具去安装.(一般来说还是用第三方) 大概就是这个样子索. 2. 开启usb调试 1)开发者选项打开(不知道怎么打开的问度娘) 2)开启USB调试 ...
- Appium自动化(3) - adb无线连接手机的方法
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 除了USB方式连接Andro ...
- 『与善仁』Appium基础 — 26、常用手机操作的API说明
目录 1.获取当前手机的时间 2.获取手机屏幕的宽和高 3.获取手机当前网络 4.设置手机网络模式 5.操作手机通知栏 6.综合练习 7.发送键到设备(掌握) 8.手机截图(掌握) 是针对手机一些常用 ...
- appium基础之简单的小例子
appium环境搭建了,当然也要开始用起来了,记录一下学习的过程 遇到问题 1.The permission to start '.ui.home.view.HomeActivity' activit ...
- Appium基础教程
目录 Appium教程 Appium简介 App自动化测试工具对比 Appium实现原理 环境搭建 Andorid介绍 基本架构 常见布局/视图 基本控件 控件常见属性 Adb介绍 Adb常用命令 A ...
- 『与善仁』Appium基础 — 14、Appium测试环境搭建
目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...
- 『与善仁』Appium基础 — 18、元素定位工具(二)
目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...
随机推荐
- C# 与 C/C++ 网络传输字符串解决方案
{ 不管你的数据加没加密,只要有中文,请转16进制后再处理,把16进制再转为GB2312的byte再发送, 接收的话同样 c++ 发送时转16进制再发送,c#16进制转字符串后再转GB2312就可以了 ...
- NX二次开发-UFUN删除链表函数UF_MODL_delete_list
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...
- NX二次开发-删除功能区工具栏UF_UI_remove_ribbon
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- hdu多校第五场1002 (hdu6625) three arrays 字典树/dfs
题意: 给你两个序列a,b,序列c的某位是由序列a,b的此位异或得来,让你重排序列ab,找出字典序最小的序列c. 题解: 如果能找到a,b序列中完全一样的值当然最好,要是找不到,那也尽量让低位不一样. ...
- centos7.4安装kubernetes1.6.0(开启TLS认证)
目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...
- KNN 实战
KNN算法很简单,大致的工作原理是:给定训练数据样本和标签,对于某测试的一个样本数据,选择距离其最近的k个训练样本,这k个训练样本中所属类别最多的类即为该测试样本的预测标签.简称kNN.通常k是不大于 ...
- USACO 2008 January Silver Telephone Lines /// 二分最短路 邻接表dijkstra oj22924
题目大意: 一共有N (1 ≤ N ≤ 1,000)个电线杆,有P P (1 ≤ P ≤ 10,000)对电线杆是可以连接的, 用几条线连接在一起的电线杆之间都可相互通信,现在想要使得电线杆1和电线杆 ...
- DLL相关下断点
加载DLL 的时候断: sxe ld:[dll] 卸载DLL 的时候断: sxe ud:[dll] 比如: sxe ld:wininet.dll (在wininet.dll 被装载的时候断点) 这里 ...
- iOS开发系列-Category
Category Category是OC中特有的语法.Category的作用 * 可以在不修改原来类的基础上,为这个类扩充一些方法 * 一个庞大的类可以分为多个模块开发 * 一个庞大的类可以由多个人来 ...
- android Toast提示异常:java.lang.RuntimeException: Can't create handler inside thread that has not called
Toast只能在UI线程弹出,解决此问题可以在Toast前后加两行代码,如下所示: Looper.prepare(); Toast.makeText(getApplicationContext(),& ...