app自动化测试过程中,经常会遇到滑动屏幕操作,appium框架的话我们可以使用webdriver提供的swipe()方法来对屏幕页面进行上滑、下滑、左滑、右滑操作。

一,swipe方法介绍

  • swipe()方法源码如下:

    swipe()方法的参数说明:

    start_x:起始横坐标

    start_y:起始纵坐标

    end_x:结束时横坐标

    end_y:结束时纵坐标

    duration:滑动持续时间,单位毫秒,默认None(一般设置500-1000毫秒比较合适)

  • duration参数需要注意的是,在移动设备上滑动时间的快慢所形成的效果是不一样的。以今日头条APP首页上滑为例,同样的滑动距离,滑动较快则出现类似翻页的效果,而滑动较慢则是同一则新闻从起始位置滑动到结束位置。

  • 手机屏幕的坐标:以手机屏幕左上角为坐标中心(0, 0),向右话滑动则纵坐标不变,横坐标变大;向下滑动则横坐标不变,纵坐标变大。在uiautomatorviewer中可以元素左上角坐标与右下角的坐标,如下图中"视频"按钮

  • 因为不同测试机屏幕的尺寸很可能有差异,所以一般不使用固定的的坐标来滑动屏幕,而是先获取测试机屏幕尺寸,再通过获取的手机屏幕尺寸来确定滑动的起始、结束坐标,这样在我们更换了测试手机后不需要更改方法。使用webdriver提供的get_window_size()方法可以获取屏幕尺寸(即屏幕右下角的坐标),方法如下:

# 屏幕宽
width = driver.get_window_size()['width']
# 屏幕高
height = driver.get_window_size()['heigth']
  • 滑动屏幕操作代码如下:
# 屏幕从下向上滑动
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
# 屏幕从上向下滑动
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
# 屏幕从左向右滑动
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
# 屏幕从右向左滑动
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)

二,重新封装

我们还可以将滑动屏幕的操作封装成方法,方便后续调用

# project/common/baseOpera.py

class BaseOpera(object):
'''
基础操作
'''
def __init__(self, driver):
self.driver = driver
self.duration = 1000 @property
def width(self):
'''获取屏幕宽度'''
return self.driver.get_window_size()['width'] @property
def height(self):
'''获取屏幕高度'''
return self.driver.get_window_size()['height'] def swipe_to_left(self, base=0.1):
'''从右向左滑动'''
return self.driver.swipe(self.width*(1-base),
self.height*0.5,
self.width*base,
self.height*0.5,
self.duration
) def swipe_to_right(self, base=0.1):
'''从左向右滑动'''
return self.driver.swipe(self.width*base,
self.height*0.5,
self.width*(1-base),
self.height*0.5,
self.duration
) def swipe_to_top(self, base=0.9):
'''从下向上滑动'''
return self.driver.swipe(self.width*0.5,
self.height*base,
self.width*0.5,
self.height*(1-base),
self.duration
) def swipe_to_bottom(self, base=0.9):
'''从上向下滑动'''
return self.driver.swipe(self.width*0.5,
self.height*(1-base),
self.width*0.5,
self.height*base,
self.duration
)

三,示例

调用baseOpera.py模块中的滑动方法,向上滑动查看今日头条首页新闻,简单示意如下:

from appium import webdriver
from common.baseOpera import BaseOpera def android_driver():
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"automationName": "uiautomator2",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
# 启动app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
return driver def watch_news():
# 向上滑动今日头条首页
driver = android_driver()
bo = BaseOpera(driver)
bo.swipe_to_top() if __name__ == '__main__':
watch_new()

最新文章

  1. STM32 使用DMA+DAC+TIMER 输出正弦波
  2. 小议安卓定位伪造-实战足不出户畅玩Pokemon Go
  3. Linux Command Line 备忘
  4. 架构设计--逻辑层 vs 物理层
  5. 使用OpenXml操作Excel,以下方法用于在添加列时修改Cell的CellReference属性。
  6. Java面向对象程序设计--泛型编程
  7. jQuery选择器的学习
  8. 腾讯TGideas语义化标签(转)
  9. solr的配置文件及其含义
  10. asp.net core mvc剖析:处理管道构建
  11. 初学 Java Web 开发,从 Servlet 开发
  12. bzoj2339[HNOI2011]卡农 dp+容斥
  13. Python爬虫【实战篇】scrapy 框架爬取某招聘网存入mongodb
  14. JAVA反射优化
  15. .NET面试题系列(十六)数据库面试题
  16. Navicat Premium 修改MySQL密码(忘记密码的情况下)
  17. 背水一战 Windows 10 (97) - 选取器: CachedFileUpdater
  18. 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用(转载)
  19. Python的数据结构
  20. python笔记02:列表与元素

热门文章

  1. Eclipse的安装和配置
  2. 封装React AntD的dialog弹窗组件
  3. Java 多线程实现多窗口同时售票简单功能
  4. JS基础回顾_函数
  5. [程序员代码面试指南]递归和动态规划-数字字符串转换为字母组合的种数(DP)
  6. command三国杀开发日记20200914
  7. docker部署Broketrmq集群
  8. Netty中的一些注意事项--底层基础
  9. 9.Lock-锁
  10. JVM学习(九)volatile应用