Appium-desktop 元素定位
1、打开 appium-desktop ,点击 start session

2、打开后,点击屏幕右上角的搜索按钮

3、然后会打开配置页面,在本地服务配置信息同上面写的代码链接配置。填入正确的信息后,点击 startSession
{
"platformName": "Android", # 手机系统
"deviceName": "127.0.0.1:62001", # 设备名称,在 dos 输入 adb devices 获取
"platformVersion": "5.1.1", # 手机系统版本
"appPackage": "com.yw.yzz", # 包名(在 dos 下进入 xxx.apk 所存在的文件夹中,输入 aapt dump badging xxx.apk 获取)
"appActivity": "com.yw.yzz.biz.splash.SplashActivity", # APP 活动(在dos 下进入 xxx.apk 所存在的文件夹中,输入 aapt dump badging xxx.apk 获取)
"unicodeKeyboard": "True", # 使用 appium 的输入法,支持中文并隐藏键盘
"resetKeyboard": "True", # 将输入法重置回设备默认的输入法
"noReset": "True" # appium 启动 app 时会自动清除 app 里面的数据,noReset=True 就是启动 app 不清除数据
}

- 成功启动模拟器中的程序。如下图。此时如果模拟器和 appium-desktop 中界面不同,可点击刷新按钮同步下。

4、定位方式
- id 定位,如下
- 点击定位元素按钮,点击左侧 app 界面中的我的定位元素后,就会出现 selected element 界面

- 此时,右侧栏中可以看到,有个 id,下拉滚动条会发现还有个 resource-id。会发现他们两个是一样的。这就是说明,这个 id 是唯一的,登录按钮被唯一定位到,代码中就可以通过 id 直接定位
dr.find_element_by_id('com.yw.yzz:id/seting_tab').click()
- xpath 定位

- 用定位元素按钮定位某个元素后,右侧 selected element 栏目中找到 xpath,复制其对应的内容。通过 xpath 方法就可以定位
dr.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout[4]/android.widget.RadioButton').click()
- 还或者如下通其他属性进行编写
dr.find_element_by_xpath('//android.widget.RadioButton[@id="com.yw.yzz:id/seting_tab"]').click()
- 提示信息进行定位,也就是 content-desc
- 先用定位元素按钮定位某个元素后,右侧 selected element 栏目中,找到 content-desc,复制 content-desc 的值后。通过 find_element_by_accessibility_id(),将对应的值作为参数传入

dr.find_element_by_accessibility_id('content-desc').send_keys("1777982xxxx")
- AndroidUiautomator 定位
- 这个在运行时,调用的是 Android 自带的 UI 框架 UiAutomator 的 Api。格式固定,介绍几个常用的格式如下

# text 内容
dr.find_element_by_android_uiautomator('new UiSelector().text("QQ号/手机号/邮箱")').send_keys("1777982xxxx")
# 包含 text 文字
dr.find_element_by_android_uiautomator('new UiSelector().textContains("手机号")').send_keys("1777982xxxx")
# 以 text 什么开始
dr.find_element_by_android_uiautomator('new UiSelector().textStartsWith("QQ号")').send_keys("1777982xxxx")
# 正则匹配 text
dr.find_element_by_android_uiautomator('new UiSelector().textMatches("^QQ号/手机号.*")').send_keys("1777982xxxx")
dr.find_element_by_android_uiautomator('new UiSelector().textMatches(".*手机号.*")').send_keys("1777982xxxx")

# resource-id、resourceIdMatches
dr.find_element_by_android_uiautomator('new UiSelector().resourceId("com.tencent.mobileqq:id/login")').click()

# description(Content-desc 的属性的值为 desc)
dr.find_element_by_android_uiautomator('new UiSelector().description("请输入QQ号码或手机或邮箱")').send_keys("1777982xxxx")
# descriptionStartsWith(以 content-desc 的属性值 desc 开始)
dr.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("请输入QQ号码")').send_keys("1777982xxxx")
# descriptionMatches(content-desc 中包含 desc)
dr.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*或邮箱$")').send_keys("1777982xxxx")
dr.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*QQ号码或手机.*")').send_keys("1777982xxxx")
- find_elements_by_xxx() 用法
dr.find_elements_by_class_name("android.widget.EditText")
dr.find_elements_by_id("com.tencent.mobileqq:id/btn_login")
# className
dr.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
# classNameMatches
dr.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")'
- tap() 坐标定位点击操作

tap(self, positions, duration=None):
:Args:
- positions - list类型,里面对象是元组,最多五个。如:[(100, 20), (100, 60)]
- duration - 持续时间,单位毫秒,如:500
# coding:utf-8
from appium import webdriver
from time import sleep
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '4.4.2',
'appPackage': 'com.baidu.yuedu',
'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) sleep(5)
# 点弹出框去看看
driver.tap([(810, 1776), (1080, 1905)], 500) # 返回上一页
driver.back()
sleep(2)
5、通过不同的定位方式查找元素
- 我们也可以通过 appium-desktop 的 search for element 功能。通过定位方式和对应的值来查找元素,从而验证定位方式和值的正确性


- 可以看到定位方式就是我们第 4 种说的集中定位方式。选择一个定位方式,填入对应的值,点击 search

- 选中找到的元素,可以看到左侧对应手机界面中的元素被选中。从而也证明我们的这种定位方式和对应的值都是没问题的。可以定位到元素的。
- 如果是按钮,就点击 tap element,相当于代码中的 click()
- 如果是输入框,就在 "enter keys" 中输入内容,然后点击 sendkeys 就可以往已选的元素中输入内容,相当于代码中的 send_keys()

6、录制
- 点击小眼睛图标的录制按钮,可以看到界面展现出来代码模块。可以选择录制语言 --> python 或其他

- 然后和右侧 selected element 栏目中的 tap、send keys、clear 或者 search for element 结合操作,根据 search for element 找到元素定位i,并 tap 或者 sendkeys 等操作。这些操作都会被录制下来并生成 python 代码。可直接使用
7、实例
from appium import webdriver
from time import sleep caps = {
"platformName": "Android",
"deviceName": "127.0.0.1:62001",
"platformVersion": "5.1.1",
"appPackage": "com.baidu.yuedu",
"appActivity": "com.baidu.yuedu.splash.SplashActivity",
"unicodeKeyboard": "True",
"resetKeyboard": "True",
"noReset": "True"
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",caps)
sleep(5) # 定位取消升级按钮
driver.find_element_by_xpath('//android.widget.TextView[@text="取消"]').click()
sleep(2)
# 定位搜索按钮
# driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.baidu.yuedu:id/tab_search")').click()
# driver.tap([(970,86),(1042,125)],500)
driver.find_element_by_id("com.baidu.yuedu:id/tab_search").click()
Appium-desktop 元素定位的更多相关文章
- Appium Desktop 元素定位和脚本录制功能
Appium Desktop除了可以做Server之外还可以进行元素定位和脚本录制功能,点击放大镜按钮,进入页面设置.开始配置Desired Capabilities. 配置Desired Capab ...
- 初探appium之元素定位(1)
无论是selenium还是appium,元素定位都是我们开始实现自动化面临的第一个问题.selenium还好,我们可以在浏览器的调试页面进行元素定位还是蛮方便的.那么appium怎么做呢? 我看到很多 ...
- Appium Android 元素定位方法 原生+H5
APPIUM Android 定位方式 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement eleme ...
- Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...
- Appium + Python -------------元素定位
说在前面 1.https://github.com/appium/python-client/tree/master/test 里面有一些test ,可以看看,研究研究 2.学会使用 uiautom ...
- appium xpath元素定位
1.id定位 写法:driver.find_element_by_id("这里是resource-id") 2.name定位 name定位就是通过UI Automator工具查看的 ...
- Appium+Python 自动化-appium常用元素定位方法
https://www.cnblogs.com/rabbit-testing/p/8042733.html 大牛 https://blog.csdn.net/kaka1121/article/deta ...
- 【APP自动化】Appium Android 元素定位方法 原生+H5
参考资料: http://blog.csdn.net/vivian_ljx/article/details/54410024
- appium自动化测试之元素定位
方法一 使用SDK中附带的uiautomatorviewer来定位 在SDK安装目录下的tools下有个uiautomatorviewer.bat批处理文件点击运行 运行后(注意appium desk ...
- Python+Appium自动化测试(5)-appium元素定位常用方法
对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor.之前已经介绍过了weditor的使用,这里我将 ...
随机推荐
- Javascript 获取随机颜色的几种方式
先认识一下颜色值的表达方式 #FFFFFF,由6位16进制数组成.#FFFFFFFF,由8位16进制数组成,前6位表示颜色,后两位数表示透明度,数值越大,透明度越小.rgb(255,255,255), ...
- Linux 压缩备分篇(一 备份数据)
备份文件 dump dump: -S 仅列出待备份数据需要多少磁盘空间才能够备份完毕 -u 将 ...
- 36 Thread 多线程
/* * 多线程的实现方式: * 方式1:一种方法是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例 * * Thread * Str ...
- Python设计模式(4)-装饰模式
# coding=utf-8 # * 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是# * 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,# * 又 ...
- c++ 启发式搜索解决八数码问题
本文对八数码问题 启发式搜索 (C++)做了一点点修改 //fn=gn+hn #include<iostream> #include<queue> #include<st ...
- bfs和dfs辨析—基础复习(从stack和queue的角度来理解区别,加深理解,不再模糊)
参考: https://www.cnblogs.com/Tovi/articles/6194815.html https://blog.csdn.net/dangzhangjing97/article ...
- 【Jenkins】参数化引用
我们在Jenkins里设置了参数如下 1. Jenkins中引用 shell引用 $env windows bat引用 %env% 在git等源码管理时,调用参数的格式${env} 2. jmete ...
- Flask接口开发过程中的心得2019.10.03
完善了一下慕课网实战中的post接口开发,得到了一些进步: 代码如下: #coding=utf-8 from flask import Flask from flask import request ...
- SMTP发邮件(直接可用)实例
string file = "邮件测试.txt";//放在Debug下的一个txt文件. MailAddress from = new MailAddress("自己的邮 ...
- python执行提示“ImportError: No module named OpenSSL.crypto”
错误信息如下: Traceback (most recent call last): File "/usr/local/yunanbao/yxz-script/autoops/TaskSer ...