1、模拟手势点击坐标

在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)

那就拿出绝招:点击元素所在位置的坐标。(坐标定位)

详细说明:

如下图定位"去看看"这个元素,除了坐标属性,其他没有可用于定位的属性信息了。这个时候就需要用坐标来进行定位点击了。

下图中可以看到右侧bonds属性:[374,831][654,906],我的理解是第一个坐标是红框框长方形的左上角坐标,第二个坐标是红框框长方形的右下角坐标,所以如果我想要点击红框框的内容,只要[374~654,831~906]之间的任意一个坐标都可以用。

如下图所示:

2、tap()用法

tap()方法并不是我们之前说过的TouchAction类中的tap()方法,该tap()方法是模拟手势触摸的方法。

tap()方法介绍:

# 可模拟手指点击(最多五个手指),可设置按住时间长度(毫秒) :
tap(self, positions, duration=None) 参数Args:
positions : list(列表)类型,里面对象是元组,最多五个。
如:[(100, 20), (100, 60)],
元组中一个元素表示一个坐标, 元组中最多可有5个坐标。
duration : 持续时间,单位毫秒,如:500 # 调用方式
driver.tap([(100, 20), (100, 60), (100, 100)], 500)

3、练习

"""
1.学习目标
熟悉tap方法使用,当元素没有任何明确属性的时候,可以使用,来定位元素,
2.操作步骤
2.1 熟悉tap方法:触摸,不同于TouchAction中的tap方法
2.2 调用方式
driver.tap(positions,duration=None)
2.3 说明:
driver.tap([坐标,最多5个坐标],持续时间)
参数:
--positions 坐标 列表格式[(x,y),(x,y),(x,y)]
列表中每个元组表示一个坐标
--duration 持续时间 3.需求
设置app中使用tap方法点击"通知"选项
""" # 1.导入appium和TouchAction
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP启动名
} # 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
# 使用tap方法点击设置app页面中"通知"选项,
# 通过元素定位工具UI Automator Viewer,可以知道"通知"的坐标范围[108,894][720,965]
# x轴 范围 108--720
# y轴 范围 894--965
# 页面等待
driver.wait_activity(".Settings", 10) # 点击"通知"选项
driver.tap([(120, 900)], 3000) # 注:持续时间有和没有,在效果上区别不是很大。 # 5.关闭APP
time.sleep(3)
driver.quit()

提示:

因为之前一直用的click()方法进行点击,click()方法是定位元素后才进行点击操作的。

而页面中的坐标信息是一直存在的,所以tap()方法会直接运行,所以脚本执行的时候,没有点击效果,是因为执行坐标定位点击操作的时候,元素还没有出现。

因此tap()触摸方法前面务必加上延时或者判断!!!

4、弊端

通过坐标定位是元素定位的下下策,实在没办法才用这个,另外如果换了其他手机,分辨率就会不一样,这个坐标就不能写死了,得算出所在屏幕的比例。

注意:

不到万不得已不要用tap()触摸方法,因为不同手机分辨率不同,同样的元素在不同手机的位置不同。

最新文章

  1. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误
  2. javascript一些小问题
  3. 新的博客 bincoding.github.io
  4. OpenCV人形检测Hog
  5. 移动端 设计与开发经验之ViewPort
  6. poj3292-Semi-prime H-numbers(筛法打表)
  7. java第三章动手动脑
  8. 10 程序员必备:Linux日常维护命令
  9. linux多线程驱动中调用udelay()对整个系统造成的影响(by liukun321咕唧咕唧)
  10. AlgorithmsI Programming Assignment 1: Percolation
  11. 微软build 2015
  12. Unity cg vertex and fragment shaders(一)
  13. 那些学些网址_jquery初学知识
  14. JAVAEE规范基础知识
  15. 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL
  16. Web开发环境搭建 Eclipse-Java EE 篇
  17. 【翻译】Open ID Connect---OIDC 是什么东西?
  18. springboot 中的commandLineRunners接口
  19. 20180705 fragment
  20. Android学习总结——DrawerLayout 侧滑栏点击事件穿透

热门文章

  1. [linux] rm -rf删除软链接无权限?
  2. WSL + MobaXterm 取代虚拟机
  3. 线性表A,B顺序存储合并
  4. 日常Java 2021/9/29
  5. 大厂高频面试题Spring Bean生命周期最详解
  6. adult
  7. centos 7 重新获取IP地址
  8. Linux学习 - 输入输出重定向,管道符,通配符
  9. 基于DataX将数据从Sqlserver同步到Oracle
  10. 【Python】【Basic】MacOS上搭建Python开发环境