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. Django 已生成数据时怎么查询数据库

    数据库已写好时,怎样查询数据库 1.输入命令:python manage.py inspectdb  > model1.py     注:>重定向 到model1.py

  2. intelij idea 和 eclipse 使用上的区别

    一.项目创建区别 使用基于IntelliJ的IDE,都会对project和module的关系比较糊涂.用简单的一句话来概括是: IntelliJ系中的Project相当于Eclipse系中的works ...

  3. 【学习笔记】Iperf3网络性能测试工具

    [学习笔记]Iperf3网络性能测试工具 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高. ...

  4. RESTful API设计的点

    RESTful API 前言 一直在使用RESTful API,但是好像概念还是很模糊的,总结下使用到的点 设计的规范 协议 API与用户的通信协议,总是使用HTTPs协议. 域名 应该尽量将API部 ...

  5. csdn的垃圾体验

    微信扫码登录网页csdn,每次扫码都是csdn有关的不同的公众号,必须关注才可以登录,为了推广公众号真是简直了 无法修改id 注销也需要扫码,这次是必须下载csdn的app才能注销,我真是服了,我都要 ...

  6. editplus 怎么替换为换行

    到editplus 的搜索 菜单中,选择替换,记住 这边如果是简单的一些 通用字符 替换可以直接替换,如果是一些特殊的字符 那必须选择 替换框左下中间的 “正则表达式”,即把这个“正则表达式” 前边的 ...

  7. tortoise 设置beyond Compare比较工具

    1.桌面右击tortoiseSVN->setting->Diff Viewer面板,选择external,选中beyond Compare路径

  8. Python冒泡排序算法及其优化

    冒泡排序 所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了.(图中排好序的元素标记为黄 ...

  9. APP测试和WEB测试区别

    App测试web测试的区别 单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的 根据两者载体不一样,则区别如下: 1.兼容性测试:web端兼容浏览器,app端兼 ...

  10. Windows DC域控由server08r2升级至server2016测试

    测试环境 原DC: csctest.com CSCDC01 192.168.100.1 server08r2 CSCDC02 192.168.100.2 server08r2 要求: 原两台旧主机均更 ...