方法一:

原理,锁定某一个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)

 

,每个元素都在坐标系中,可以用坐标系定位元素。