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中的内置函数getattr()介绍及示例
Jul 20 Python
在Python中操作字典之update()方法的使用
May 22 Python
Python抽象类的新写法
Jun 18 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
python实现用户管理系统
Jan 10 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
pybind11在Windows下的使用教程
Jul 04 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python3如何在服务器打印资产信息
Aug 27 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 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
DedeCms模板安装/制作概述
2007/03/11 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php服务器的系统详解
2019/10/12 PHP
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
python实现从web抓取文档的方法
2014/09/26 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
python读写配置文件操作示例
2019/07/03 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
《黄河颂》教学反思
2014/02/07 职场文书
销售主管岗位职责
2014/02/08 职场文书
大学生村官演讲稿
2014/04/25 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript