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. Docker命名空间

    命名空间 命名空间( namespace )是 Linux 内核的一个强大特性,为容器虚拟化的实现带来极大便利,利用这 特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的操作系 ...

  2. java添加对象成功后想知道当前添加对象的id

    我使用的是springboot Mybatis写的项目,结构如下 mapper.xml(以下2个属性必须要有,主键id 一般是自动生成的) mapper.java  (注意新增的返回值不需要,一般情况 ...

  3. intellJ svn控制错误

    电脑突然蓝屏了,重启打开intellj 后原本好好的项目是可以用intellj更新或者提交的,现在却都不能了,如图: 如上图:svn地址里是空白的,应该显示: 那到底是什么情况呢,就因为电脑崩溃了in ...

  4. openwrite使用说明

    访问官网https://openwrite.cn/注册登录 访问https://openwrite.cn/plugin-chrome/ 下载插件和安装插件"OpenWrite助手1.1.4& ...

  5. ES6构造函数class 和 ES5构造函数语法

    构造函数就是JavaScript程序定义好的函数,我们直接使用就可以,实际也是一种函数,构造函数专门用于生成定义对象,通过构造函数生成的对象,称为实例化对象 构造函数分为两种,一种是JavaScrip ...

  6. Redis linux 下安装

    Redis linux 下安装 下载Redis安装包,可以从Redis中文网站中下载 下载地址:http://www.redis.cn/download.html Redis4.0 稳定版本 使用&l ...

  7. Linux命令与Shell

    Linux 目录结构及解释 查看命令行执行完位置:  echo $BASH 命令记录 mkdir mkdir命令 用来创建目录. 语法:mkdir (选项)(参数) 主要选项: -m<目标属性& ...

  8. Java读源码之CountDownLatch

    前言 相信大家都挺熟悉 CountDownLatch 的,顾名思义就是一个栅栏,其主要作用是多线程环境下,让多个线程在栅栏门口等待,所有线程到齐后,栅栏打开程序继续执行. 案例 用一个最简单的案例引出 ...

  9. [护网杯2018] easy_laravel

    前言 题目环境 buuoj 上的复现,和原版的题目不是完全一样.原题使用的是 nginx + mysql 而 buuoj 上的是 apache + sqlite composer 这是在 PHP5.3 ...

  10. LABEL和UUID

    基本用法 blkid 查看LABEL # blkid -s LABEL /dev/hda3: LABEL="/" /dev/hda1: LABEL="/boot1&quo ...