Appium中scroll和drag_and_drop根据元素位置滑动


Posted in Python onFebruary 15, 2022

背景

我们在操作APP应用时,有些需要从一个元素滑动到另外一个元素时,这时候我们无法确定坐标,所以swipe 根据坐标滑动方式就无法使用了,如下图:从 课堂直播 上滑到 直播公开课 位置

Appium中scroll和drag_and_drop根据元素位置滑动


这时候我们就需要使用其他滑动方式,我们想到可以根据元素进行滑动,Appium 里面根据元素来进行滑动的方式主要方法为 scrolldrag_and_drop

scroll 介绍

说明

从一个元素滚动到另一个元素,只能是两个元素之间的滑动。

方法详情

def scroll(self: T, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> T:
        """Scrolls from one element to another

        Args:
            origin_el: the element from which to being scrolling
            destination_el: the element to scroll to
            duration: a duration after pressing originalEl and move the element to destinationEl.
                Default is 600 ms for W3C spec. Zero for MJSONWP.

        Usage:
            driver.scroll(el1, el2)

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """

        # XCUITest x W3C spec has no duration by default in server side
        if self.w3c and duration is None:
            duration = 600

        action = TouchAction(self)
        if duration is None:
            action.press(origin_el).move_to(destination_el).release().perform()
        else:
            action.press(origin_el).wait(duration).move_to(destination_el).release().perform()
        return self

参数:

  • origin_el - 要滚动的起始元素
  • destination_el - 要滚动到的结束元素
  • duration - 持续时间,单位毫秒,默认为 600 ms

操作场景

  • 进入网易云首页
  • 从课堂直播滑动到直播公开课位置

关键代码实现

# 定位到课堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='课堂直播']").click()

# 定位到直播公开课元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公开课']").click()

# 执⾏滑动操作
driver.scroll(el1,el2)

说明

操作过程有 惯性,需要添加duration参数,参数值越大,惯性越小。

drag_and_drop 介绍

说明

从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置。

方法详情

def drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement) -> T:
        """Drag the origin element to the destination element

        Args:
            origin_el: the element to drag
            destination_el: the element to drag to

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """
        action = TouchAction(self)
        action.long_press(origin_el).move_to(destination_el).release().perform()
        return self

参数:

  • origin_el - 要滑动页面的起始元素
  • destination_el - 要滑动页面到结束元素

操作场景

  • 进入网易云首页
  • 从课堂直播滑动到直播公开课位置

关键代码实现

# 定位到课堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='课堂直播']").click()

# 定位到直播公开课元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公开课']").click()

# 执⾏滑动操作
driver.drag_and_drop(el1,el2)

说明

不能设置持续时间,没有惯性

滑动和拖拽使用场景选择

滑动和拖拽无非就是考虑是否具有“惯性”,以及传递的参数是“元素”还是“坐标”。

  • scroll:有 “惯性” ,传入 “元素”,可以通过设置duration参数来进行控制惯性大小
  • drag_and_drop:无 “惯性” ,传入 “元素”
  • swipe:有 “惯性” ,传入 “坐标”,可以通过设置duration参数来进行控制惯性大小

说明: 添加duration参数,参数值越大,惯性越小

到此这篇关于Appium中scroll和drag_and_drop根据元素位置滑动的文章就介绍到这了,更多相关Appium 元素滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python写的英文字符大小写转换代码示例
Mar 06 Python
详解Python中for循环的使用
Apr 14 Python
Python实现信用卡系统(支持购物、转账、存取钱)
Jun 24 Python
Python构建图像分类识别器的方法
Jan 12 Python
python中web框架的自定义创建
Sep 08 Python
Python是什么 Python的用处
May 26 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Python进度条的使用
May 17 Python
python 远程执行命令的详细代码
Feb 15 #Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
You might like
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
php对称加密算法示例
2014/05/07 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python中创建二维数组
2018/10/17 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
centos7之Python3.74安装教程
2019/08/15 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
家具厂厂长岗位职责
2014/01/01 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
安徽导游词
2015/02/12 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书