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()触摸方法,因为不同手机分辨率不同,同样的元素在不同手机的位置不同。

『与善仁』Appium基础 — 27、模拟手势点击坐标的更多相关文章

  1. 『与善仁』Appium基础 — 25、APP模拟手势高级操作

    目录 1.手指轻敲操作 2.手指按下和抬起操作 3.等待操作 4.手指长按操作 5.手指移动操作 6.综合练习 APP模拟手势的动作都被封装在TouchAction类中,TouchAction是App ...

  2. 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍

    目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...

  3. 『与善仁』Appium基础 — 26、常用手机操作的API说明

    目录 1.获取当前手机的时间 2.获取手机屏幕的宽和高 3.获取手机当前网络 4.设置手机网络模式 5.操作手机通知栏 6.综合练习 7.发送键到设备(掌握) 8.手机截图(掌握) 是针对手机一些常用 ...

  4. 『与善仁』Appium基础 — 9、补充:C/S架构和B/S架构说明

    目录 1.C/S架构和B/S架构概念 2.C/S结构与B/S架构的区别 3.C/S架构和B/S架构优点和缺点 (1)B/S模式的优点和缺点: (2)C/S模式的优点和缺点: 1.C/S架构和B/S架构 ...

  5. 『与善仁』Appium基础 — 10、Appium基本原理

    目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...

  6. 『与善仁』Appium基础 — 12、Appium的安装详解

    目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...

  7. 『与善仁』Appium基础 — 14、Appium测试环境搭建

    目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...

  8. 『与善仁』Appium基础 — 15、使用Appium的第一个Demo

    我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...

  9. 『与善仁』Appium基础 — 16、APPium基础操作API

    目录 1.前置代码 2.安装和卸载APP 3.判断APP是否已安装 4.关闭APP软件和关闭驱动对象 5.发送文件到手机和获取手机中的文件 6.获取当前屏幕内元素结构(重点) 7.脚本内启动其他APP ...

随机推荐

  1. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)

    题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...

  2. doxygen文件配置

    主要配置修改 整个程序配置分几个部分 Project related configuration options 项目相关,包括: 项目名 输出目录 输出语言 是否显示继承属性 是否对C.Java.F ...

  3. perl 多fasta文件匹配,并提取匹配文件第一条序列

    目标如题,有多个fasta文件和一个文件名列表,将文件名列表中包含的文件匹配出来并提取第一条序列合并成一个fa文件. 这个采用perl实现,用法和代码如下: 1 #!/usr/bin/perl -w ...

  4. Oracle-with c as (select ......) 实现多次调用子查询结果

    with c as  (select a.trandt,sum(a.tranam) tranam from tran a group by a.trandt )   #将子查询抽取出来,以后可以直接重 ...

  5. 『学了就忘』Linux文件系统管理 — 64、磁盘配额的配置步骤

    目录 1.手工建立一个5GB的分区 2.建立需要做限制的三个用户 3.在分区上开启磁盘配额功能 4.建立磁盘配额的配置文件 5.开始设置用户和组的配额限制 6.启动和关闭配额 7.磁盘配额的查询 8. ...

  6. mysql-centos8下安装

    参考文章 1.下载安装包 客服端与服务端 依赖包 2.linux下检查是否安装 rpm -qa | grep -i mysql 安装过会显示软件名称,没安装过就是空的 3.安装包传到虚拟机 先需要把安 ...

  7. Netty实现Socket

    Netty实现Socket 从Java1.4开始, Java引入了non-blocking IO,简称NIO.NIO与传统socket最大的不同就是引入了Channel和多路复用selector的概念 ...

  8. 连接查询条件在on后面和条件在where后面

    emp表结构如下: dept表结构如下: 内连接 条件语句放在on 后面和 where 结果对于inner join结果是一样的 但对于left join 结果会产生不一样 这种现象也比较好理解,如果 ...

  9. SpringMVC详细实例

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  10. MFC入门示例之树控件(CTreeControl)

    1 //增加按钮 2 void CMFCApplication8Dlg::OnBnClickedButtonAdd() 3 { 4 //树中添加节点 5 CString strText; 6 GetD ...