肖sir__高级讲师___讲解app屏幕滑动定位(swipe方法)整理


app屏幕滑动定位(swipe方法)
swipe语法:
Swipe(int start x,int start y,int end x,int y,time)#参数的个数根据实际情况使用
解释:
int start x-开始滑动的x坐标,
   int start y -开始滑动的y坐标。
   int end x -结束点x坐标,
   int end y -结束点y坐标。
   time 滑动时间(默认5毫秒)
给swipe指定坐标,因为每个手机的屏幕分辨率不一样,指定一个固定的坐标,并不是适用所有手机,所以这里可以通过获取手机屏幕坐标实现,提升代码重用。

python-appium手机自动测试如何实现滑动呢,在webdriver 的api中只提供了指定两个坐标的滑动,但不同的手机分辨率不同,这样写出来的自动化脚本兼容性就不是那么好了。。那么怎么实现滑动呢,仔细看了下webdriber中的方法,发现有个方法get_window_size() ,这个方法可以获得手机的宽度和高度,这样我们就可以实现按屏幕比率滑动了。。具体方法如下:
首先我们给定固定三个参数:0.5  0.25  0.75,(参数合理就好)因为不管向上向下还是向左向右滑,他们的参数都在由大到小变化或者由小到大的变化

理解下下面的图:
1、屏幕的坐标图,向上滑动屏幕就是x轴不变,y轴由大到小的变化过程:图来解释,这个时候屏幕坐标肯定是比原来屏幕1,3坐标小,因为屏幕在往上滑
2、屏幕的坐标图,向下滑动屏幕就是x轴不变,y轴由小到大的变化过程
3、屏幕的坐标图,向左滑动屏幕就是y轴不变,x轴由大到小的变化过程
4、屏幕的坐标图,向右滑动屏幕就是y轴不变,x轴由小到大的变化过程

图的理解:当前屏幕的参数跟着当前滑动屏幕的参数走,在屏幕滑动时在屏幕上下选个参考物做讲解
来区分上下滑


源码如下:
#defgetSize():获取机器屏幕大小
#defswipeup(t):屏幕向上滑动,x1为x轴坐标,y1起始的y轴坐标,y2结束的y轴坐标
# x1 =int(l[0] *0.5):l是上面函数中返回的屏幕大小,0和1其实是索引位,0代表x值,1代表y的值
defgetSize():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return(x, y)
----------------------------------------------------------------------

上滑操作就是从屏幕的下端点击一个坐标然后往上滑动,x坐标可以不变。Y的开始和结束坐标改进即可。

----------------------------------------------------------------------
#屏幕向上滑动(代码里把注释去掉)
defswipeup(t):
l = getSize()
x1 =int(l[0] *0.5)
y1 =int(l[1] *0.75)
y2 =int(l[1] *0.25)
driver.swipe(x1, y1, x1, y2, t)
sleep(6)
swipeup(1000)
---------------------------------------------------------------------

下滑就是从屏幕的上端点击一个坐标然后往下滑动到另外一个坐标,x坐标可以不变。Y的开始和结束坐标改变即可。

---------------------------------------------------------------------
#屏幕向下滑动
defswipedown(t):
l = getSize()
x1 =int(l[0] *0.5)
y1 =int(l[1] *0.25)
y2 =int(l[1] *0.75)
driver.swipe(x2, y1, x1, y1, t)
sleep(6)
swipedown(1000)

-----------------------------------------------------------

左滑就是从屏幕的右端点击一个坐标点往左滑动到另外一个坐标点。Y坐标可以不改变。X的开始和结束坐标改变即可。

-----------------------------------------------------------
#屏幕向左滑动
def swipLeft(t):
    l=getSize()
    x1=int(l[0]*0.75)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.25)
    driver.swipe(x1,y1,x2,y1,t)

------------------------------------------------------------------------------

下滑就是从屏幕的上端点击一个坐标然后往下滑动到另外一个坐标,x坐标可以不变。Y的开始和结束坐标改变即可。

-----------------------------------------------------------------------------

幕向右滑动
def swipRight(t):
    l=getSize()
    x1=int(l[0]*0.25)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.75)
    driver.swipe(x2,y1,x1,y1,t)
=============================================================

app自动化测时,经常会用到查找元素、定位元素、发送数据、长按、点

击、上滑、下滑、左滑、右滑等操作。

我们要用手机滑动,我们用代码实现,所以是我们学习的目标,

下面讲下用appium自带的swipe方法怎么实现上滑、下滑、左滑、右滑。

一、swipe()

通过传递坐标信息即可完成滑动

为了通用,可以使用其他机型的手机,利用百分比的方式操作

一.            打开uiautomator来熟悉X、Y坐标的概念

 每个元素都有开始和结束坐标。(也就是这个元素在屏幕中个位置)

右边的显示区域最后一个元素的开始坐标为[60,535],结束坐标为 [659,582]      #比如【取消】按钮

我们要滑动屏幕,也就是点击一个坐标然后滑动到另外一个坐标,做了这样的操作后,屏幕就会相应的滑动。

=================================================================================

先获取屏幕的大小,每款手机尺寸不一,所以通过get_window_size函数获取尺寸。

# 获取整个屏幕的宽和高
size = driver.get_window_size()
print(size) # 打印结果{'width': 720, 'height': 1280}

上滑操作就是从屏幕的下端点击一个坐标然后往上滑动,x坐标可以不变。Y的开始和结束坐标改进即可。

==============================================================================

Swipe(int start x,int start y,int end x,int y,duration)

解释:int start x-开始滑动的x坐标,

  int start y -开始滑动的y坐标。

   int end x -结束点x坐标,

   int end y -结束点y坐标。

   duration 滑动时间(默认5毫秒);

参考图:

 ===================================================

案例演示(1):百度阅读(图书)向右滑动两次

from appium import webdriver
from bbbb.roll import *

caps = {
    "platformName": "Android",
    "deviceName": "127.0.0.1:62001",
    "platformVersion": "4.4.w",
    "appPackage": "com.baidu.yuedu",
    "appActivity": "com.baidu.yuedu.splash.SplashActivity"
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
sleep(8)
# 取消更新
driver.find_element_by_id("com.baidu.yuedu:id/negativeUpgrade").click()
sleep(4)
driver.find_element_by_id('com.baidu.yuedu:id/righttitle').click()   #点击图书
sleep(8)
#向右移动一次
size = driver.get_window_size()
x1 = size.get("width") * 0.9
x2 = size.get("width") * 0.1
y = size.get("height") * 0.5
driver.swipe(x1, y, x2, y, duration=1000)

#向右移动一次
size = driver.get_window_size()
x1 = size.get("width") * 0.9
x2 = size.get("width") * 0.1
y = size.get("height") * 0.5
driver.swipe(x1, y, x2, y, duration=1000)

=======================================================

案例演示(2)

第一个模块:页面滑屏:aa模块

from appium import webdriver
from bbbb.roll import *

caps = {
    "platformName": "Android",
    "deviceName": "127.0.0.1:62001",
    "platformVersion": "4.4.w",
    "appPackage": "com.baidu.yuedu",
    "appActivity": "com.baidu.yuedu.splash.SplashActivity"
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
sleep(8)
# 取消更新
driver.find_element_by_id("com.baidu.yuedu:id/negativeUpgrade").click()
sleep(4)
driver.find_element_by_id('com.baidu.yuedu:id/righttitle').click()   #点击图书
sleep(8)
# rollUp(driver, 2)
# rollDown(driver, 2)
# rollLeft(driver, 3)
# rollRight(driver, 3)

第二个模块:roll.py

from time import sleep

# 左滑
def rollLeft(driver, t=1):
    for i in range(t):
        size = driver.get_window_size()
        x1 = size.get("width") * 0.9
        x2 = size.get("width") * 0.1
        y = size.get("height") * 0.5
        driver.swipe(x1, y, x2, y, duration=1000)
        sleep(2)

# 右滑
def rollRight(driver, t=1):
    for i in range(t):
        size = driver.get_window_size()
        x1 = size.get("width") * 0.1
        x2 = size.get("width") * 0.9
        y = size.get("height") * 0.5
        driver.swipe(x1, y, x2, y, duration=1000)
        sleep(2)

# 上滑
def rollUp(driver, t=1):
    for i in range(t):
        size = driver.get_window_size()
        x = size.get("width") * 0.5
        y1 = size.get("height") * 0.9
        y2 = size.get("height") * 0.2
        driver.swipe(x, y1, x, y2, duration=1000)
        sleep(2)

# 下滑
def rollDown(driver, t=1):
    for i in range(t):
        size = driver.get_window_size()
        x = size.get("width") * 0.5
        y1 = size.get("height") * 0.2
        y2 = size.get("height") * 0.9
        driver.swipe(x, y1, x, y2, duration=1000)
        sleep(2)

=====================================================================

原文地址:https://www.cnblogs.com/xiaolehua/p/14203955.html