一、页面滑动原理:
因为页面上没有可使用的任何元素,所以页面滑动原理即为坐标轴原理,值得注意的是,这个坐标轴不想我们初中数学的坐标轴(分为四个象限),即我们学习的这个坐标轴左上角为(0,0)点,y向下,x向右,没有负数的情况
我们向左滑动:x为:从600——>50
向右滑动:x为从50——>600
向上、向下滑动:
说了这么多,其实在appium里面,我们要用的函数是:
driver.swipe(x,y,x1,y1,time)
我们通过adb tools文件里面的uiautomatorviewer.bat获取坐标点
坐标点区间如下:
具体代码实现如下:
# coding=utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
# apk包名
'appPackage': 'com.sina.weibo',
# apk的launcherActivity
'appActivity': 'com.sina.weibo.VisitorMainTabActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.swipe(700,400,50,400) #不带滑动时间
driver.swipe(700,400,50,400,2000) #带滑动时间2s
如上代码,我们可以看到是有缺点的,我们固定了坐标轴,如果我们换一个手机,上面的代码是不是可能就不好使了,所以我们就要换一种方案:通过屏幕比例
代码如下:
# coding=utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
# apk包名
'appPackage': 'com.sina.weibo',
# apk的launcherActivity
'appActivity': 'com.sina.weibo.VisitorMainTabActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
size = driver.get_window_size() #获取屏幕大小
width = size["width"] #获取宽度
height = size["height"] #获取高度
x1 = width/10*9 #9/10 处
y1 = height/2 #1/2出
x = width/10
driver.swipe(x1,y1,x,y1)
但是这样写的话,如果有1000个屏幕,这样写是不是很繁琐,所以,我们要学习python函数(封装),如果其他地方要是用这个方法,就可以调用:
封装:就是把重复的代码封装在一个盒子里,其他地方用到,调用就可以了,减少了代码的重复性,增加了复用性
# coding=utf-8
from appium import webdriver
def get_driver():
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
# apk包名
'appPackage': 'com.sina.weibo',
# apk的launcherActivity
'appWaitActivity': 'com.sina.weibo.VisitorMainTabActivity' #切换activity
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
return driver
driver = get_driver()
#获取屏幕宽高
def get_size():
size = driver.get_window_size()
width = size["width"]
height = size["height"]
return width,height
#向左边滑动
def swipe_left():
#[100,200]
x1 = get_size()[0]/10*9
y1 = get_size()[1]/2
x = get_size()[0]/10
driver.swipe(x1,y1,x,y1)
#向右滑动
def swipe_right():
x1 = get_size()[0] / 10 * 9
y1 = get_size()[1] / 2
x = get_size()[0] / 10
driver.swipe(x,y1,x1,y1)
#向上滑动
def swipe_up():
x1 = get_size()[0]/2
y1 = get_size()[1]/10*9
y = get_size()[1]/10
driver.swipe(x1,y1,x1,y)
#向下滑动
def swipe_down():
x1 = get_size()[0]/2
y1 = get_size()[1]/10*9
y = get_size()[1]/10
driver.swipe(x1,y,x1,y1)
#滑动方向
def swipe_on(direction):
if direction == "left":
swipe_left()
elif direction == "right":
swipe_right()
elif direction == "up":
swipe_up()
else:
swipe_down()
swipe_on("up")
在调试过程中,遇到一个问题:
在使用appium过程中遇到了执行一个用例时有多个不同的acitivity的情况,以下为app内部切换acitivity的方法:
如果需要多次切换activity,则appWaitActivity来实现。
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
# apk包名
'appPackage': 'com.sina.weibo',
# apk的launcherActivity
'appWaitActivity': 'com.sina.weibo.VisitorMainTabActivity' #切换activity
#'appActivity': 'com.sina.weibo.VisitorMainTabActivity' # 不能切换activity
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
这篇主要说明了启动页面滑动使用了函数,还有一个注意点,就是多个不同的acitivity的情况
来源:CSDN
作者:qq_38889350
链接:https://blog.csdn.net/qq_38889350/article/details/103904000