方法一:
原理,锁定某一个icon-a,然后按住,把icon-a放到icon-b的位置,实际就是完成了拖动的操作
使用场景:适合适配所有分辨率,就是从icon-a滑动到icon-b,不考虑分辨率不通,定位像素不准确的问题。
实例:比如,在当前界面找到了一组同样名字的元素,id也好,classname也好,这一组元素一个屏幕显示不下,当前就显示了一部分,就需要滑动操作,让后面显示出来
from appium import webdriver
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)#desired_caps参数,详细百度。
els=driver.find_elements_by_id(the_id)
el_a=els.pop(3)
el_b=els.pop(0)
driver.drag_and_drop(el_a,el_b)#按住el_a,把他拖动到el_b的位置,也就是实现了,把第四个icon拖动到了第一个icon的操作
方法二:
原理,根据x,y轴的位置,拖动屏幕
试用场景,在界面里就一个icon,在一个icon范围里完成拖动,但是设置x和y的坐标到时候建议靠中间取值,这样分辨率改变的时候,大部分情况还是可以用的。
实例:
from appium.webdriver.common.touch_action import TouchAction
from appium import webdriver
dr=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)#desired_caps参数,详细百度。
TouchAction(dr).press(x=800,y=1400).move_to(x=-700,y=0).release().perform()
'''这里有个巨大无比的坑!!!!
如果你想从坐标(x=800,y=1400),移动到坐标(x=100,1400),就是在手机下方从右向左移动。
根据语法表面意思,move_to,后面的坐标,是你想要移动“到”!!!的地方的坐标,
但是如果你直接写了你想要移动到的坐标,程序是给你做了加法,可以通过appium日志查看到,
如果按照下面注释里去写,最后传过去的坐标是move_to(900,2800),但是手机屏幕是1080*1920的,
就会报错,说你坐标无效的,因为y坐标已经超出1920的边界了。巨坑无比啊!
所以,第二个坐标,实际不是你想要的位置,而是变化量,而且变化量可以是负数的。
向比自己坐标小的地方移动,就是减法,
向比自己坐标大的地方移动,就是加法。
不移动,变化量就是0,那直接写0就可以了
TouchAction(dr).press(800,1400).move_to(100,1400).release().perform()
'''
本着社会主义接班人的觉悟,我重新写了这个方法,如下,亲测可用,真正填写你想move_to——也就是移动“到”的地方的坐标
def move_to(self,a,b,a1,b1):
return TouchAction(self.dr).press(x=int(a),y=int(b)).move_to(x=int(a1)-int(a),y=int(b1)-int(b)).release().perform()
PS:坐标的获取,可以打开开发者选项里面的指针位置,就可以看到x和y轴的坐标了
方法三:
最近发现了一个swipe的方法,很高大上,很简单一用上手
引用一段别人写的
“appium 处理滑动的方法是 swipe(int start-x, int start-y, int end-x, int end-y, int during)
此方法共有5个参数,都是整形,依次是起始位置的x y坐标和终点位子的x y坐标和滑动间隔时间,单位毫秒
坐标是指:屏幕左上角为坐标系原点(0,0),屏幕分辨率为终点坐标,比如你手机分辨率1080*1920,那么该手机坐标系的终点是(1080*1920)
,每个元素都在坐标系中,可以用坐标系定位元素。
”