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 urllib、urllib2、httplib抓取网页代码实例
May 09 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
Pandas 缺失数据处理的实现
Nov 04 Python
Python numpy数组转置与轴变换
Nov 15 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
如何搭建pytorch环境的方法步骤
May 06 Python
Python pandas如何向excel添加数据
May 22 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
Python读取Excel数据并生成图表过程解析
Jun 18 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+MySQL 制作简单的留言本
2009/11/02 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
js实现交通灯效果
2017/01/13 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
python tkinter界面居中显示的方法
2018/10/11 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
行政文员岗位职责
2013/11/08 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
四年级数学教学反思
2014/02/02 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python