坐标轴写错了一点,偏移了点,好歹也是在范围之内 。如果选择边缘的点,偏了点可能就出不去了 。所以,一般选一个元素的坐标,尽量选择中心 。 每个点之间的间隔是一样的 。从一个点挪到另外一个点,y 轴不用动,x 轴只要有个固定的距离就好了 。
例如 3 个点的值是:147.376、359.378、571.378
能把这 3 个值直接这样写出来吗?不能 。换台设备就不行了,这样绝对的数据是不能放在这里的 。采用和滑屏操作一样的思想,用百分比和相对距离 。如果能获取到元素的大小以及起点坐标就可以了 。

文章插图
距离是 59 。147-59=88

文章插图
可以估算一下:

文章插图
如果是长方形那就需要另外再算,但是图中是正方形,这 9 个格子的间距是没有什么区别的,重点是它与边界值的差距 。
边界值的差距是多少?把它分成 6 份 。第一个点的坐标:能够得到 view 的起点坐标是 45,272 。有专门的函数可以获取元素的大小以及它的起点坐标 。

文章插图
假设起点坐标是 x、y,我现在已经知道将它分成了 6 份 。
那么,第一个点的坐标怎么写?x+width*1/6 + height*1/6
看 size 源码:

文章插图
看 location 源码:

文章插图
#元素的大小size=ele.size# 均分的步长 高和宽一样(因为是正方形)step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系 。取得是终点,问题不大,还是可以滑动到的 。# 元素的起点坐标-左上角ori=ele.locationpoint1=(ori["x"]+step,ori["y"]+step)TouchAction(driver)
文章插图
等于横向走了这么远,纵向也走了这么远,刚好对着这个点了 。
第二个点的坐标怎么算?
基于第一个点的基础上做调整就行了 。y 轴不变,x 轴往前走了 2 份 。

文章插图
第 3 个点也是在第 2 个点的基础上往前挪动了 2 个 。
#元素的大小size=ele.size# 均分的步长 高和宽一样(因为是正方形)step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系 。取得是终点,问题不大,还是可以滑动到的 。# 元素的起点坐标-左上角ori=ele.locationpoint1=(ori["x"]+step,ori["y"]+step)point2=(point1[0]+step*2,point1[1]) #x 轴增加了 2*steppoint3=(point2[0]+step*2,point2[1]) #x 轴增加了 2*stepTouchAction(driver)第 4 个点的坐标:它是倒着往回走 。
第 5 个点的坐标 。
#元素的大小size=ele.size# 均分的步长 高和宽一样(因为是正方形)step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系 。取得是终点,问题不大,还是可以滑动到的 。# 元素的起点坐标-左上角ori=ele.locationpoint1=(ori["x"]+step,ori["y"]+step)point2=(point1[0]+step*2,point1[1]) #相对于 point1,x 轴增加了 2*steppoint3=(point2[0]+step*2,point2[1]) #相对于 point2,x 轴增加了 2*steppoint4=(point3[0]-step*2,point3[1]+step*2)#相对于 point3,x 轴减少了 2*step,y 轴增加了 2*steppoint5=(point4[0],point4[1]+step*2)#相对于 point4,x 轴不变,y 轴增加了 2*stepTouchAction(driver).press(x=point1[0],y=point1[1]).wait(200).move_to(x=point2[0],y=point2[1]).wait(200).move_to(x=point3[0],y=point3[1]).wait(200).move_to(x=point4[0],y=point4[1]).wait(200).move_to(x=point5[0],y=point5[1]).wait(200).release().perform()#.是换行用的 。以 1 个点做基准,针对不同的点做基准,容易把自己绕晕了 。所以,都以前一个点做基准 。也可以以起点作为基准 。6.代码
from appium import webdriverimport timefrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom appium.webdriver.common.mobileby import MobileByimport timefrom appium.webdriver.common.touch_action import TouchActiondesired_caps={}# 平台类型desired_caps["platformName"]="Android"# 平台版本号desired_caps["platformVersion"]="7.0"# 设备名称desired_caps["deviceName"]="XPUDU17713003790"# app 包名desired_caps["appPackage"]="填上 appPackage"# app 入口 acitivitydesired_caps["appActivity"]="填上 appActivity"# 重置与否desired_caps["noReset"]=True# 连接 Appium server 。前提:appium desktop 要启动 。有监听端口 。# 将 desired_caps 发送给 appium server 。打开 appdriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)ele=driver.find_element_by_id("填上元素定位下吧,如果你 app 这里的元素定位不了,那就只能用坐标了,需要另外学习这块的坐标怎么写,呜呜")# 元素的大小size=ele.size# 均分的步长 高和宽一样(因为是正方形)step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系 。取得是终点,问题不大,还是可以滑动到的 。# 元素的起点坐标-左上角ori=ele.locationpoint1=(ori["x"]+step,ori["y"]+step)point2=(point1[0]+step*2,point1[1]) #相对于 point1,x 轴增加了 2*steppoint3=(point2[0]+step*2,point2[1]) #相对于 point2,x 轴增加了 2*steppoint4=(point3[0]-step*2,point3[1]+step*2)#相对于 point3,x 轴减少了 2*step,y 轴增加了 2*steppoint5=(point4[0],point4[1]+step*2)#相对于 point4,x 轴不变,y 轴增加了 2*stepTouchAction(driver).press(x=point1[0],y=point1[1]).wait(100).move_to(x=point2[0],y=point2[1]).wait(100).move_to(x=point3[0],y=point3[1]).wait(100).move_to(x=point4[0],y=point4[1]).wait(100).move_to(x=point5[0],y=point5[1]).wait(100).release().perform()#.是换行用的 。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 26个Excel表格基本操作技巧,方便实用,效率翻倍
- 网络扫描神器Nmap常用操作方法详解以及使用脚本爆破telnet密码
- 深入解析什么是磁盘阵列技术?常用的磁盘阵列有哪几种?
- 盘点电子工程师常用的42款工具
- 常用数据结构
- |台钓基本操作及术语
- 春砂仁和什么起泡茶,春砂仁有几种常用吃法
- 华为鸿蒙操作系统深度解析
- 蓝天白云太阳向日葵图片,向日葵般送几朵
- 常用开源协议对比
