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 元素定位的更多相关文章

  1. Appium Desktop 元素定位和脚本录制功能

    Appium Desktop除了可以做Server之外还可以进行元素定位和脚本录制功能,点击放大镜按钮,进入页面设置.开始配置Desired Capabilities. 配置Desired Capab ...

  2. 初探appium之元素定位(1)

    无论是selenium还是appium,元素定位都是我们开始实现自动化面临的第一个问题.selenium还好,我们可以在浏览器的调试页面进行元素定位还是蛮方便的.那么appium怎么做呢? 我看到很多 ...

  3. Appium Android 元素定位方法 原生+H5

    APPIUM Android 定位方式   1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement eleme ...

  4. Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...

  5. Appium + Python -------------元素定位

    说在前面 1.https://github.com/appium/python-client/tree/master/test  里面有一些test ,可以看看,研究研究 2.学会使用 uiautom ...

  6. appium xpath元素定位

    1.id定位 写法:driver.find_element_by_id("这里是resource-id") 2.name定位 name定位就是通过UI Automator工具查看的 ...

  7. Appium+Python 自动化-appium常用元素定位方法

    https://www.cnblogs.com/rabbit-testing/p/8042733.html 大牛 https://blog.csdn.net/kaka1121/article/deta ...

  8. 【APP自动化】Appium Android 元素定位方法 原生+H5

    参考资料: http://blog.csdn.net/vivian_ljx/article/details/54410024

  9. appium自动化测试之元素定位

    方法一 使用SDK中附带的uiautomatorviewer来定位 在SDK安装目录下的tools下有个uiautomatorviewer.bat批处理文件点击运行 运行后(注意appium desk ...

  10. Python+Appium自动化测试(5)-appium元素定位常用方法

    对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor.之前已经介绍过了weditor的使用,这里我将 ...

随机推荐

  1. springboot httpsession.getAtt....is null

    1.开始怀疑是 @RequestMapping("") public String loginIndex() { return "admin/login"; } ...

  2. 奥卡姆剃刀原则在ERP项目的应用

    一向崇信“奥卡姆剃刀原则”,如非必要,绝不新增. 在我所实施的项目中,自定义字段.自定义报表非常少.很极端的一个例子是,曾经有一家工厂,生产打印机的部件,产品百分之百外销. 在项目实施完成,成功上线后 ...

  3. AJ学IOS(39)UI之核心动画之CABasicAnimation(基础动画)

    AJ分享,必须精品 一.CABasicAnimation简介 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPat ...

  4. python操作MySQL数据库报错问题解决

    编写好Python操作数据库的脚本后,运行报错如下: 报错1:“AttributeError: 'NoneType' object has no attribute 'encoding'” 解决办法: ...

  5. Python语法详解

    python语法解析 目录 python语法解析 一.顺序结构 二.分支结构 2.1 if 的基本语法 2.2 if 的基本应用 三.循环结构 3.1 while 语法 3.1.1 语法结束条件 3. ...

  6. ASE课程总结 by 冯晓云

    开始的开始,采访往届ASE班的blog:http://www.cnblogs.com/legs/p/4894362.html 和北航软工M1检查:http://www.cnblogs.com/legs ...

  7. leetcode-0617 合并二叉树

    题目地址https://leetcode-cn.com/problems/merge-two-binary-trees/ 1.递归解法 递归的话我们首先需要递归的终止条件,对于本题而言,递归的终止条件 ...

  8. alfred workflow 开发

    alfred python demo

  9. kubernetes删除pod,pod一直处于Terminating状态

    删除pod,pod一直处于Terminating状态 [root@yxz-cluster01 deploy_yaml]# kubectl get pod -n yunanbao NAME READY ...

  10. Java 多线程实现方式一:继承Thread类

    java 通过继承Thread类实现多线程很多简单: 只需要重写run方法即可. 比如我们分三个线程去京东下载三张图片: 1.先写个下载类: 注意导入CommonsIO 包 public class ...