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中optionParser模块的使用方法实例教程
Aug 29 Python
Python中集合类型(set)学习小结
Jan 28 Python
python实现井字棋游戏
Mar 30 Python
利用python发送和接收邮件
Sep 27 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Python科学画图代码分享
Nov 29 Python
深入理解Django-Signals信号量
Feb 19 Python
python中property属性的介绍及其应用详解
Aug 29 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
python使用PIL剪切和拼接图片
Mar 23 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
Python绘图之柱形图绘制详解
Jul 28 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
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
jQuery的一些注意
2006/12/06 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
JQuery小知识
2010/10/15 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
js charAt的使用示例
2014/02/18 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
jquery replace方法去空格
2017/05/08 jQuery
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
js实现轮播图特效
2020/05/28 Javascript
Python类属性的延迟计算
2016/10/22 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
python实现手机销售管理系统
2019/03/19 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
经典c++面试题三
2015/07/08 面试题
科研课题实施方案
2014/03/18 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
罚站检讨书
2015/01/29 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
公司考勤管理制度
2015/08/04 职场文书
礼貌问候语大全
2015/11/10 职场文书
运动会主持人开幕词
2016/03/04 职场文书